除了使用下标来访问vector对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator)。迭代器是一种检查容器内元素并遍历元素的数据类型。
标准库为每一种标准容器定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。
- 容器的iterator类型 每种容器都定义了自己的迭代器类型,如vector:
vector<int>::iterator iter;
这条语句定义了一个名为iter的变量,它的数据类型是由vector定义的iterator类型。每个标准库容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型的含义相同。
-
begin和end操作 每种容器都定义了一对命名为begin和end的函数,用于返回迭代器,如果容器中有元素的话,由begin返回的迭代器指向第一个元素:
vector<int>::iterator iter = ivec.begin();
上述语句把iter初始化为由名为begin的vector操作返回的值。假设vector不空,初始化后,iter即指该元素为ivec[0]。 由end操作返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器(off-the-end iterator), 表明它指向了一个不存在的元素。如果vector为空,begin返回的迭代器与end返回的迭代器相同。
-
vector迭代器的自增和解引用运算 迭代器类型可使用解引用操作符(*操作符)来访问迭代器所指向的元素: *iter = 0; 解引用操作符返回迭代器当前所指向的元素。
-
迭代器应用的程序示例
for (vector<int>::iterator iter = ivec.beging();
iter != ivec.end(); ++iter)
*iter = 0;
- const_iterator 前面的程序用vector::iterator改变vector中的元素值。每种容器类型还定义了一种名为const_iterator的类型,该类型只能用于读取容器内元素,但不能改变其值。