C++ 迭代器

迭代器在C++中非常重要,大量泛型算法都接受迭代器作为输入,因此熟练使用迭代器,是提高C++编程效率的有效手段。根据头文件 iterator 中的划分来了解如何使用迭代器。

迭代器操作 意义
advance(it, n) it = it + n, 双向或随机访问迭代器时 n 可以为负数
distance(first, last) [first, last) 之间的元素个数
begin、end 返回首位、尾部迭代器
prev、next 返回前(后)一个迭代器
生成迭代器 意义
back_inserter 尾插迭代器 —— 容器必须有 push_back 操作
front_inserter 头插迭代器 —— 容器必须有 push_front 操作
inserter 初始化指定位置的迭代器,插入操作在指定位置开始 —— 容易必须有 insert 操作
流迭代器 意义
istream_iterator 输入流迭代器, 可以将输入流绑定到迭代器中, 使用 >> 输入
ostream_iterator 输出流迭代器, 将输出流绑定到迭代器中, 使用 << 输出

使用迭代器高效编程的例子, 从标准输入中提取整数并输出到标准输出中:

vector<int> arr;
copy( istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(arr) ); // 输入整数, ctl + D 退出输入
copy( arr.begin(), arr.end(), ostream_iterator<int>(cout, " ") ); // 输出

相对与传统的循环, 上面仅需 3 行就完成了需求。

使用迭代器遍历数组:

int arr[] = {1, 2, 3, 4, 5};

for(auto start=begin(arr); start != end(arr); ++start)
	cout << start << " ";
// 上下语句等价
copy( begin(arr), end(arr), ostream_iterator<int>(cout, " ") );

标准库提供 begin、end, 传入容器或者C风格数组指针可以返回相对的迭代器, 使得与泛型算法更兼容。

你可能感兴趣的:(学习,C++,c++,迭代器,流迭代器,iterator)