c++primer-3.3标准库类型vector
vector
vector是模板不是类型
1、定义和初始化对象
列表初始化不能用圆括号,只能用花括号。
当你在花括号中的元素无法执行列表初始化时,会考虑用这样的值来构造vector对象。例如下面这样的情况。
vector<string> v{10}; //在这这个10就不是说明他初始化对象的值为10,而是指创建了10个vector对象。原因在于这里vector对象数据类型为string,因此无法用10进行初始化。
3.3.3 其他vector操作
vector中的size成员返回值类型是由vector定义的size_type类型。
vector对象(以及string对象)的下标运算不能用来添加新的元素。
3.4 迭代器介绍
string也可以使用迭代器,迭代器用来访问容器中的元素。迭代器有有效和无效。
3.4.1 使用迭代器
end返回指向容器(或string对象)“尾元素的下一位置”。end成员返回的迭代器被称作尾后迭代器。
如果容器为空,则begin和end返回的迭代器都是尾后迭代器。
迭代器类型:iterator 和 const_iterator
c++11标准引入了cbegin和cend,无论容器或者string对象类型是否是常量,都将返回const_iterator
在这书中提到任何使用迭代器的循环体,都不要像迭代器所属的容器添加元素。
思考:1、任何可能改变vector对象容量的操作都会使该vector对象的迭代器失效。
2、不能再范围for循环中向vector对象添加元素。
3.4.2 迭代器运算
两个迭代器相减得到的是两个迭代器的距离,类型是difference_type的带符号整型数。
介绍了一下二分搜索的想法,但是其实现前提是序列为有序的。