C++学习笔记-220705-V1
# Cpp杂货铺
头文件
climits/limits.h
中包含了关于整型限制的信息,下表给出了climits中的一些符号常量:符号常量 表示 CHAR_BIT char的位数 CHAR_MAX char的最大值 CHAR_MIN char的最小值 SCHAR_MAX signed char的最大值 SCHAR_MIN signed char的最小值 UCHAR_MAX unsigned char的最大值 SHRT_MAX short的最大值 SHRT_MIN short的最小值 USHRT_MAX unsigned short的最大值 INT_MAX int的最大值 INT_MIN int的最小值 UINT_MAX unsigned int的最大值 LONG_MAX long的最大值 LONG_MIN long的最小值 ULONG_MAX unsigned long的最大值 LLONG_MAX long long的最大值 LLONG_MIN long long的最小值 ULLONG_MAX unsigned long long的最大值 cout.put(char)
显示一个字符;wchar_t
类型,是一种 整数类型。cin/cout
处理的是char流,不适于用来处理wchar_t
类型,iostream
头文件提供了wcin/wcout
用于处理wchar_t流;另外,加上前缀L
来指示宽字符常量和宽字符串。wchar_t bob = L'P'; wcout << L"tall" << endl;
C++11新增类型:
char16_t
、char32_t
;前者长16位,用u前缀表示字符常量和字符串常量:
u'C'和u"be good"
;后者长32位,用U前缀表示字符常量和字符串常量:
U'R'和U"dirty rat"
.更好的常量定义方法:
const type name = value;
;其他的常量定义方法:
#define name value
。但const比#define好首先在于他可以指明类型,其次可以使用作用域规则将定义限制在特定的函数或文件中,最后可以将const用于更复杂的类型(数组,结构等)。cout.setf()
的作用是通过设置格式标志来控制输出形式boolalpha 可以使用单词”true”和”false”进行输入/输出的布尔值. oct 用八进制格式显示数值. dec 用十进制格式显示数值. hex 用十六进制格式显示数值. left 输出调整为左对齐. right 输出调整为右对齐. scientific 用科学记数法显示浮点数. fixed 用正常的记数方法显示浮点数(与科学计数法相对应). showbase 输出时显示所有数值的基数. showpoint 显示小数点和额外的零,即使不需要. showpos 在非负数值前面显示”+(正号)”. skipws 当从一个流进行读取时,跳过空白字符(spaces, tabs, newlines). unitbuf 在每次插入以后,清空缓冲区. internal 将填充字符回到符号和数值之间. uppercase 以大写的形式显示科学记数法中的”e”和十六进制格式的”x”.
auto
关键字,自动推断类型,自动但很少用。有时候字符串很长,可以将两个用引号括起来的字符串合并为一个,即任何两个由空白分隔的 字符串常量 都将自动拼接为一个。
面向行的输入:
cin.getline()
和cin.get()
:cin.getline(name,size)
通过换行符确定结尾,不保存换行符。cin.get(name,size)
读取到行尾,但是 保留换行符 ,意味着如下调用会出错(因为第二次调用时看到的是换行符,不能读取任何内容)cin.get(name,arSize); cin.get(dessert,arSize); // a problem
cin.get()
不带任何参数读取下一个字符(包括换行符)cin.getline()、cin.get()
返回cin对象,即可以链式调用cin.get(name,ArSize).get()
当
get()
读取空行或者getline()
读取的字符串长度比分配的空间长时,会设置失效位,使得后续输入将被阻断,可使用cin.clear()
恢复输入;对于
string
类型字符串读取行时使用getline(cin, name)
.
C++11新增原始字符串类型:
R"(raw string)"
,其中"(
和)"
是原始字符串的默认定界符,自定义定界符可在默认定界符之间添加任意数量的基本字符( 空格、左右括号、斜杠、控制字符 除外),例如下述程序中的R"=**( )=**"
;除此之外前缀R可与其他字符串前缀结合使用,位置前后没有要求。#include<iostream> #include<string> int main() { using namespace std; string str1 = R"(let i = \n " " )"; char str2[] = R"=**(R"(example)")=**"; wchar_t str3[] = LR"(""""")"; char16_t str4[] = uR"(sni"\n)"; return 0; }
4.4.6节不理解;
对于下述代码
const char * bird = "wren";
"wren"实际表示的是字符串地址,此语句是将"wren"的地址赋值给了bird指针,并且,字符串字面值是常量,所以要声明关键字const.
显示字符串数组地址需要将指针类型由
char *
转换为int *
;模板类
vector
和array
vector<typeName> vt(n_elem); array<typeName, n_elem> arr;
注意的是,vector中的n_elem可以是变量,而array中的n_elem不能是变量;
其次,vector元素个数可变,但是相比数组效率低,array元素个数不可变,效率与数组一样,但比数组更加安全。
基于范围的for循环(C++11)
double prices[3] = {4.99, 10.99, 6.87}; for(double x : prices) cout << x << endl;
若要修改数组元素
double prices[3] = {4.99, 10.99, 6.87}; for(double &x : prices) cout << x << endl;
头文件
<cctype>
中包含了一些字符检查相关的函数,总结如下:函数名称 功能 isalnum()
判断是否为字母或数字 isalpha()
判断是否为字母 iscntrl()
判断是否为控制字符 isdigit()
判断是否为数字 isgraph()
判断是否为除空格之外的打印字符 islower()
判断是否为小写字母 isprint()
判断是否为打印字符(包括空格) ispunct()
判断是否为标点符号 isspace()
判断是否为标准空白字符 isupper()
判断是否为大写字母 isxdigit()
判断是否为十六进制数字 tolower()
返回小写字母 toupper()
返回大写字母