分类: C/C++
2013-01-25 11:24:42
试试把标题改成汉语会不会审核
Chapter 3 Strings, Vectors, and Arrays
1. 结合auto,decltype高效使用诸如容器长度等变量
string::size_type 这一类的全打出来费劲,自己如果不小心用带符号的又会触发警告,直接auto之
auto sz = 某string.size();//全搞定
2. range for 语句,这颗糖很甜,类似python中那个for语句,遍历时很方便,格式:
for (declaration : expression)
statement
declaration就是expression中的element,遍历每一个element;这个expression必须是个可顺序遍历的(对象)
原文写的是 expression is an object of a type that represents a sequence,用法:
string str("helloworld");
for(auto s: str)
cout<
如果想要更改元素,可以用引用,auto &s : str。
后面的第五章有强调,range-for暂存(cached)了expression的end()位置,如果循环体内增加或者删除元素将会导致失效,有风险。
3. 同一容器的容器,过去vector
4. 容器的list initialization
vector
5. cbegin与cend返回const迭代器
如果一个vector是const的那么它的begin、end返回的也是const迭代器,但容器谁用const的。。。
为了避免遍历时的误修改,新增了cbegin,cend返回常迭代器,相当于const_iterator
6. std中的begin与end。这个不是std::vector/list/map等等容器的member function,直接在std中
auto iv = begin(v);//v是一个vector,begin相当于v.begin
这个begin、end也可以作用在数组上,注意end仍是返回最后一个元素的下一位置。(the one past/after last element)
7. auto妙用
int ary[3][4];
for(auto i =ary; i
cout<<*j<<" ";
三行四列的数组,i指向每一行的首地址,j每次指向一个4个元素的数组,循环范围小于4.