vector
标准库类型vector表示对象的集合,其中所有的对象类型都相同;集合中每个对象都有一个与之对应的索引,索引用于访问对象。
vector是一个类模板,是模板而非类型。
1. 初始化vector对象
vector<T> v1 T类型空vector,执行默认初始化
vector<T> v2(v1) v2包含所有v1元素的副本
vector<T> v2=v1 同上
vector<T> v3(n,val) v3包含n个val
vector<T> v4(n) 包含n个重复执行值初始化对象
vector<T> v5{a,b,c...} 每个元素赋相应的初始值
vector<T> v5={a,b,c...} 同上(不可以用圆括号)
vector<int>v(10):v有10个元素每个值都为0
vector<int>v{10}:v有1个元素,该元素的值为10
vector<string> v{"kk"} 列表初始化,v有1个元素
vector<string> v("kk") 错,不能用字符串字面值构建vector对象
vector<string> v{10} 有10个默认初始化的元素
vector<string> v{10,"kk"} 有10个值为"kk"的元素
2. 相关操作
(1)C++标准要求vector能高效快速添加元素,因此既然vector对象能高效增长那么在定义时指定大小没什么意义的,还会使性能更差,除非所有的元素都一样的时候。
(2)相关操作函数
v.push_back(t) 尾部添加元素
v.empty() 判断是否为空
v.size() 返回v中元素个数
v[n] 返回第n个位置的引用
v1=v2 拷贝初始化
v1={a,b,c,d...} 用列表元素替换v1
v1==v2 元素数量及对应位置元素是否都相等
>,>=,<,<= 字典序比较
(3)不能用下标形式添加元素,用push_back;下标运算符可用于访问已存在的元素而不能用于添加元素(string对象也是);
迭代器
1. 所有标准库容器都可以使用迭代器;
2. 使用
(1)有迭代器的类型同时拥有返回迭代器的的成员,如这些类型都拥有begin(返回指向第一个元素的迭代器)、end(返回指向容器(或string对象)尾元素的下一个位置的迭代器,即不存在的尾后元素)成员;如果容器为空,begin和end均返回尾后迭代器;
*iter 返回iter所指元素的引用
iter->mem 解引用iter并获取该元素名为mem的成员,等价于(*iter).mem
++iter 指向下一个元素
== 判断两个迭代器是否相等,即指示同一个元素或他们是同一容器的尾后迭代器;
(2)注意:使用了迭代器的循环体,都不要向迭代器所属的容器添加元素;
数组
1. 数组的大小确定不变,不能随意向数组中增加元素;数组中的元素的个数也属于数组类型的一部分,编译的时候维度应该是已知的,即维度必须是一个常量表达式。
2. 注意字符数组必须有位置存放空字符!
3. 不能将数组的内容拷贝给其他数组作为初始值,也不能用数组给其他数组赋值。
4. 访问数组元素:下标、迭代器
参考:C++ primer