###C++ Primer第5版 学习笔记
####第三章
- string::size返回string::size_type类型,体现标准库机器无关,结果与有符号数运算时要谨慎
- vector int初始化与range for
using vi = vector<int>;
vi v1(5);
vi v2(5,8);
vi v3{9};
vi v4{9,7};
auto vv{v1,v2,v3,v4};
for(auto&& i1: vv) {
for(auto&& i2 : i1) {
cout << i2 << " ";
}
cout << ", ";
}
//0 0 0 0 0 , 8 8 8 8 8 , 9 , 9 7 ,
- vector string 初始化
vs ("sssss");
不合法 - 范围for语句体内不应改变遍历序列的大小
- const_iterator 是底层 const, cbegin 和 cend 返回 const_iterator
- string 和 vector 带有 difference_type 用于存储迭代器之间的距离
- 数组下表通常使用 size_t 是机器相关的无符号类型
- 指针相减为 ptrdiff_t 类型, 无符号,机器相关
- 对数组,auto 与 decltype 结果不同
int ia[10] = {0,1,2,3,4,5,6,7,8,9};
auto ia2(ia);//ia2是指向ia第一个元素的int指针
//相当于auto ia2(&ia[0]);
decltype ia3 = {0,1,2,3,4,5,6,7,8,9};//ia3是10维度的 int 数组
ia3[0] = 10;
- begin 和 end 函数返回数组的头,尾后指针
int ia[] = {1,2,3};
int *beg = begin(ia);
int *end = end(ia);
- 下标和指针
p[2]
相当于*(p+2)
- 因此内置的下标运算符可以处理负值,而标准库限定的必须是无符号类型
- C风格字符串不是类型,而是为了表达和使用字符串而形成的写法
- string::c_str返回的数组不一定一直有效,改变 string 可能会使之前的数组失效,应尽快复制
- 用数组初始化 vector
vi ivec(begin(int_arr), end(int_arr));
- 多维数组嵌套范围 for 语句结合 auto引用 遍历.
看到的第一篇用中文写的,好亲切。。o(╯□╰)o