C++Primer学习笔记12.7

79 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

3.3 标准库类型vector

标准库类型vector表示对象的集合。vector是一个类模板,模板本身不是类或函数,相反可以将模板看成编译器生成类或函数编写的一份说明。编译器根据模板创建类或函数的过程称为实例化

警告:对于某些编译器可能仍需要老实声明来处理vector的vector对象,如vector<vector<int> >

3.3.1 vector的定义和初始化

c++11新标准提供列表初始化的方式,即

vector<string> articles = {"a", "af", "dsfa"};

初始化的真正含义依赖于传递初始值时用的时花括号还是圆括号。在用一个整数初始化时可能会产生歧义,需要仔细甄别

vector<int> v1(10);     //v1有10个元素 0
vector<int> v2{10};     //1个元素 10

vector<int> v3(101); //10个元素 1
vector<int> v4{101}; //两个元素 10, 1

如果初始化用了花括号形式,但提供的值又不能列表初始化,那么就可以考虑用来构造初始化

vector<string> s1{"hi"}; //v5有一个元素
vector<string> s2("hi"); //err
vector<string> s3{10};   //转为构造初始化 有10个元素
vector<string> s4{10,"hi"}; //转为构造初始化 10个hi

3.3.2 向vector对象中添加元素

关键概念:vector对象能高效增长。通常情况下,在定义vector对象的时候,不需要设定大小。如果实现设定了大小,效率反而会更差,只有一种例外情况是所有元素的值都一样。

所以,高效做法是开始创建空vector对象,然后再动态添加元素

3.4 迭代器介绍

在使用下标访问string对象的字符和vector的对象元素这一方法之外,还可以使用迭代器这一更通用的机制。

有效的迭代器:指向某个元素,或者指向容器中尾元素的下一位置。

其余情况都是无效迭代器