《C++ Primer》笔记迭代器iterator

1.每种容器类型都定义了自己的迭代器类型,如 vector:

     vector<int>::iterator iter;

这符语句定义了一个名为 iter 的变量,它的数据类型是 vector<int> 定 义的 iterator 类型。每个标准库容器类型都定义了一个名为 iterator 的成 员,这里的 iterator 与迭代器实际类型的含义相同。 

2.begin end 操作

每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如

果容器中有元素的话,由 begin 返回的迭代器指向第一个元素:

vector<int>::iterator iter = ivec.begin(); 

由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出 末端迭代器”(off-the-end iterator)。表明它指向了一个不存在的元素。 

由 end 操作返回的迭代器并不指向 vector 中任何实际的元 素,相反,它只是起一个哨兵(sentinel)的作用,表示我们 已处理完 vector 中所有元素。 

3.vector 迭代器的自增和解引用运算 

迭代器类型可使用解引用操作符(dereference operator)(*)来访问迭 代器所指向的元素:

*iter = 0;

解引用操作符返回迭代器当前所指向的元素。假设 iter 指向 vector 对 象 ivec 的第一元素,那么 *iter 和 ivec[0] 就是指向同一个元素。 

4.迭代器应用的程序示例 

for (vector<int>::iterator iter = ivec.begin();iter != ivec.end(); ++iter)
         *iter = 0;  // set element to which iter refers to 0

5.
const_iterator

前面的程序用 vector::iterator 改变 vector 中的元素值。每种容器类型 还定义了一种名为 const_iterator 的类型,该类型只能用于读取容器内元素, 但不能改变其值。 

 // use const_iterator because we won't change the elements
     for (vector<string>::const_iterator iter = text.begin();iter != text.end(); ++iter)
         cout << *iter << endl; // print each element in text
6.
任何改变 vector 长度的操作都会使已存在的迭代器失效。例 如,在调用 push_back 之后,就不能再信赖指向 vector 的迭 代器的值了。 
原文地址:https://www.cnblogs.com/worldtraveler/p/2835924.html