C++ 流迭代器
在C++的STL(标准模板库)中,流迭代器(Stream Iterators)是连接容器与输入/输出流的桥梁。通过流迭代器,我们可以像操作容器中的元素一样轻松地处理输入输出流中的数据,大大简化了程序的编写。
流迭代器的基本概念
流迭代器主要分为两类:
- 输入流迭代器(istream_iterator):从输入流(如
cin
)读取数据 - 输出流迭代器(ostream_iterator):向输出流(如
cout
)写入数据
这两种迭代器让我们能够像处理容器数据一样处理输入输出流,使得我们可以将STL算法直接应用于输入输出操作。
输入流迭代器(istream_iterator)
输入流迭代器允许我们从输入流中读取数据,就像从容器中读取元素一样。
基本语法
istream_iterator<T> it(istream& is); // 创建一个输入流迭代器,从is流中读取T类型的数据
istream_iterator<T> eof; // 创建一个表示结束的迭代 器
简单示例
下面是一个使用输入流迭代器从标准输入读取整数的简单示例:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
int main() {
std::cout << "请输入一些整数(Ctrl+Z结束输入):";
// 创建一个从标准输入读取整数的迭代器
std::istream_iterator<int> input_iterator(std::cin);
// 创建一个表示结束的迭代器
std::istream_iterator<int> eos;
// 使用输入迭代器构建vector
std::vector<int> numbers(input_iterator, eos);
std::cout << "您输入的数字有:";
for (const auto& num : numbers) {
std::cout << num << " ";
}
std::cout << "\n总共: " << numbers.size() << " 个数字" << std::endl;
return 0;
}
输入示例:
1 2 3 4 5^Z
输出结果:
请输入一些整数(Ctrl+Z结束输入):1 2 3 4 5^Z
您输入的数字有:1 2 3 4 5
总共: 5 个数字
备注
在Windows系统中,使用Ctrl+Z表示输入结束;而在Unix/Linux系统中,使用Ctrl+D。
输出流迭代器(ostream_iterator)
输出流迭代器允许我们向输出流写入数据,就像向容器中添加元素一样。
基本语法
ostream_iterator<T> it(ostream& os); // 创建一个输出流迭代器,向os流中写入T类型的数据
ostream_iterator<T> it(ostream& os, const char* delim); // 创建一个输出流迭代器,每次写入后添加delim分隔符