Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300203
  • 博文数量: 148
  • 博客积分: 4365
  • 博客等级: 上校
  • 技术积分: 1566
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 21:38
文章分类
文章存档

2014年(2)

2013年(45)

2012年(18)

2011年(1)

2009年(54)

2008年(28)

我的朋友

分类: 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暂存(cachedexpression的end()位置,如果循环体内增加或者删除元素将会导致失效,有风险。

3. 同一容器的容器,过去vector >,最后两个>间要由空格,好像看到过,有点忘了,现在可以不要这个空格了。

4. 容器的list initialization

vector v{3,5,7};//v初始化为有3个元素的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      for(auto j = *i; j< *i +4; j++)
         cout<<*j<<" ";

三行四列的数组,i指向每一行的首地址,j每次指向一个4个元素的数组,循环范围小于4.

阅读(348) | 评论(0) | 转发(0) |
0

上一篇:Variables and Basic Types

下一篇:函数相关

给主人留下些什么吧!~~