重读C++ Primer --Vector篇

c++ Primer 第五版 第87页

初始化vector的几种方法

vector v1;
vector v2(v1);
vector v2 = v1
vector v3(n,val) //v3包含了n个重复的元素,元素值为val
vector v4(n) // v4包含了n个重复执行了初始化的对象
vector v5{a,b,c...}
vector v5={a,b,c...}

注意初始元素值列表初始化只能使用花括号 不能使用圆括号
由于花括号和圆括号在初始化中都有,所以一定要注意,使用不同的括号,圆括号代表数量,花括号代表初值
也就是说,圆括号是用来构造的,花括号是用来列表初始化
特别地
如果初始化用的是花括号,但是提供的值又不能用来初始化,就要考虑用其进行构造

vector v5{"hi"};//列表初始化
vector v6("hi");//错误:不能用字符串构造
vector v7{10};//10不能初始化string,因此生成10个string默认对象
vector v8{10, "hi"};//10不能初始化string,因此生成10个hi

当然还是不建议上面这种容易混淆的方式进行

c++ Primer 第五版 第91页

随着对vector的使用,有很多隐含要求,其中一条就是
范围for语句体内不应改变其所遍历序列的大小
因为这样你边改边遍历,遍历的语句执行结果和预期会有差异

c++ Primer 第五版 第92页

要使用size_type 需先指定它对应的类型

vector::size_type//正确
vector::size_type//错误

c++ Primer 第五版 第96页 迭代器

迭代器解引用的操作类似于指针

for (auto it=s.begin();it != s.end() &&  !isspace(*it); ++it)
    *it = toupper(*it);//

一般来说 我们不知道迭代器的类型也不重要,不过那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型

为了便于得到const_iterator ,c++ 11标准提供了cbegin和cend函数,这样无论vector或者string对象是否是常量,都会返回const_iterator

迭代器可以和一个整数相加减,使其向后前移动
两个迭代器也可以相减,返回他们之间的距离,其类型是difference_type,带符号
迭代器之间也可以相互比较,反映其位置关系

你可能感兴趣的:(重读C++ Primer --Vector篇)