STL组件之迭代器(1)(3)
容器迭代器
尽管C++指针也是迭代器,但用的更多的是容器迭代器。容器迭代器用法和iterdemo.cpp一样,但和将迭代器申明为指针变量不同的是,你可以使用容器类方法来获取迭代器对象。两个典型的容器类方法是begin()和end()。它们在大多数容器中表示整个容器范围。其他一些容器还使用 rbegin()和rend()方法提供反向迭代器,以按反向顺序指定对象范围。
下面的程序创建了一个矢量容器(STL的和数组等价的对象),并使用迭代器在其中搜索。该程序和前一章中的程序相同。
Listing 2. vectdemo.cpp
- #include <iostream.h>
- #include <algorithm>
- #include <vector>
- using namespace std;
- vector<int> intVector(100);
- void main()
- {
- intVector[20] = 50;
- vector<int>::iterator intIter =
- find(intVector.begin(), intVector.end(), 50);
- if (intIter != intVector.end())
- cout << "Vector contains value " << *intIter << endl;
- else
- cout << "Vector does not contain 50" << endl;
- }
注意用下面的方法显示搜索到的数据:
- cout << "Vector contains value " << *intIter << endl;
常量迭代器
和指针一样,你可以给一个迭代器赋值。例如,首先申明一个迭代器:
- vector<int>::iterator first;
该语句创建了一个vector<int>类的迭代器。下面的语句将该迭代器设置到intVector的第一个对象,并将它指向的对象值设置为123:
- first = intVector.begin();
- *first = 123;
这种赋值对于大多数容器类都是允许的,除了只读变量。为了防止错误赋值,可以申明迭代器为:
- const vector<int>::iterator result;
- result = find(intVector.begin(), intVector.end(), value);
- if (result != intVector.end())
- *result = 123; // ???
警告
另一种防止数据被改变得方法是将容器申明为const类型。
『呀!在VC中测试出错,正确的含义是result成为常量而不是它指向的对象不允许改变,如同int *const p;看来这作者自己也不懂』
使用迭代器编程
你已经见到了迭代器的一些例子,现在我们将关注每种特定的迭代器如何使用。由于使用迭代器需要关于STL容器类和算法的知识,在阅读了后面的两章后你可能需要重新复习一下本章内容。
- 上一篇:详细介绍C/C++时间函数使用方法(1)
- 下一篇:STL组件之算法(1)