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

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

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
输入迭代器 输入迭代器是最普通的类型。输入迭代器至少能够使用==和!=测试是否相等;使用*来访问数据;使用++操作来递推迭代器到下一个元素或到达

输入迭代器

输入迭代器是最普通的类型。输入迭代器至少能够使用==和!=测试是否相等;使用*来访问数据;使用++操作来递推迭代器到下一个元素或到达past-the-end 值。

为了理解迭代器和STL函数是如何使用它们的,现在来看一下find()模板函数的定义:

  1. template <class InputIterator, class T>  
  2. InputIterator find(  
  3. InputIterator first, InputIterator last, const T& value) {  
  4. while (first != last && *first != value) ++first;  
  5. return first;  

注意

在find()算法中,注意如果first和last指向不同的容器,该算法可能陷入死循环。

输出迭代器

输出迭代器缺省只写,通常用于将数据从一个位置拷贝到另一个位置。由于输出迭代器无法读取对象,因此你不会在任何搜索和其他算法中使用它。要想读取一个拷贝的值,必须使用另一个输入迭代器(或它的继承迭代器)。

Listing 3. outiter.cpp

  1. #include <iostream.h>  
  2. #include <algorithm> // Need copy()  
  3. #include <vector> // Need vector  
  4. using namespace std;  
  5. double darray[10] =  
  6. {1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9};  
  7. vector<double> vdouble(10);  
  8. int main()  
  9. {  
  10. vector<double>::iterator utputIterator = vdouble.begin();  
  11. copy(darray, darray + 10, outputIterator);  
  12. while (outputIterator != vdouble.end()) {  
  13. cout << *outputIterator << endl;  
  14. outputIterator++;  
  15. }  
  16. return 0;  

注意

当使用copy()算法的时候,你必须确保目标容器有足够大的空间,或者容器本身是自动扩展的。


精彩图集

赞助商链接