容器,顺序容器
表示迭代器范围的beg,end,其范围是左闭合区间。end不是指向元素范围的最后一个元素,而是指向最后一个元素的下一位置。
如果两个迭代器相等,则迭代器范围为空
如果vector为空,begin返回的迭代器与end返回的迭代器相同
访问容器的方式:下标,迭代器
所有标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。由于通用性,一般都使用迭代器访问容器,即便对支持下标操作的vector类型也是这样。
各种运行时未定义行为
如果容器为空,迭代器解引用begin()和end()结果未定义。同样,即便容器不为空,解引用end()结果也未定义
由于end操作返回的迭代器不指向任何元素,因此不能对它进行解引用或自增操作
vector下标访问越界
迭代器为所有标准库容器类型所提供的运算
vector和deque容器的迭代器提供额外的运算:算术运算,关系操作符
list提供的是双向迭代器(Bidirectional iterators)。不提供额外运算,因为它的迭代器是用struct实现的。list不像vector一样以普通指针作为迭代器,因为其结点不保证在存储空间中连续存在
vector容量不会缩减
vector不支持push_front操作,因此不能使用front_inserter
todo:
iterator
end自增会出错,为什么?
<<c++标准程序库>>p153
安插元素和删除元素,都会使“作用点”之后的各元素的references、pointers、iterators失效。如果安插操作甚至引发内存重新分配,那么该容器身上的所有references、pointers、iterators都会失效