龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

STL组件之迭代器(1)(3)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
容器迭代器 尽管C++指针也是迭代器,但用的更多的是容器迭代器。容器迭代器用法和iterdemo.cpp一样,但和将迭代器申明为指针变量不同的是,你可以使用

容器迭代器

尽管C++指针也是迭代器,但用的更多的是容器迭代器。容器迭代器用法和iterdemo.cpp一样,但和将迭代器申明为指针变量不同的是,你可以使用容器类方法来获取迭代器对象。两个典型的容器类方法是begin()和end()。它们在大多数容器中表示整个容器范围。其他一些容器还使用 rbegin()和rend()方法提供反向迭代器,以按反向顺序指定对象范围。

下面的程序创建了一个矢量容器(STL的和数组等价的对象),并使用迭代器在其中搜索。该程序和前一章中的程序相同。

Listing 2. vectdemo.cpp

  1. #include <iostream.h>  
  2. #include <algorithm>  
  3. #include <vector>  
  4. using namespace std;  
  5. vector<int> intVector(100);  
  6. void main()  
  7. {  
  8. intVector[20] = 50;  
  9. vector<int>::iterator intIter =  
  10. find(intVector.begin(), intVector.end(), 50);  
  11. if (intIter != intVector.end())  
  12. cout << "Vector contains value " << *intIter << endl;  
  13. else 
  14. cout << "Vector does not contain 50" << endl;  

注意用下面的方法显示搜索到的数据:

  1. cout << "Vector contains value " << *intIter << endl; 

常量迭代器

和指针一样,你可以给一个迭代器赋值。例如,首先申明一个迭代器:

  1. vector<int>::iterator first; 

该语句创建了一个vector<int>类的迭代器。下面的语句将该迭代器设置到intVector的第一个对象,并将它指向的对象值设置为123:

  1. first = intVector.begin();  
  2. *first = 123; 

这种赋值对于大多数容器类都是允许的,除了只读变量。为了防止错误赋值,可以申明迭代器为:

  1. const vector<int>::iterator result;  
  2. result = find(intVector.begin(), intVector.end(), value);  
  3. if (result != intVector.end())  
  4. *result = 123; // ??? 

警告

另一种防止数据被改变得方法是将容器申明为const类型。

『呀!在VC中测试出错,正确的含义是result成为常量而不是它指向的对象不允许改变,如同int *const p;看来这作者自己也不懂』

使用迭代器编程

你已经见到了迭代器的一些例子,现在我们将关注每种特定的迭代器如何使用。由于使用迭代器需要关于STL容器类和算法的知识,在阅读了后面的两章后你可能需要重新复习一下本章内容。


精彩图集

赞助商链接