17.2流迭代器
ostream_iterator
:输出流迭代器istream_iterator
:输入流迭代器ostreambuf_iterator
:输出流迭代器istreambuf_iterator
:输入流迭代器
1.输出流迭代器
ostream_iterator
是一个输出流迭代器。它是一个接受元素类型作为模板类型参数的类模板。构造函数接受一个输出流和一个分隔符字符串,用于写入每个元素后面的流。ostream_iterator
类使用操作符<<
写入元素。
template<typename InputIter, typename OutputIter>
void myCopy(InputIter begin, InputIter end, OutputIter target)
{
for(auto iter{begin};iter!=end;++iter,++target){
*target=*iter;
}
}
int main()
{
std::vector<char> ch{'a','b','c'};
std::vector<char> cpch(ch.size());
myCopy(cbegin(ch),cend(ch),begin(cpch));
myCopy(cbegin(ch),cend(ch),std::ostream_iterator<char>{std::cout," "});
myCopy(cbegin(cpch),cend(cpch),std::ostream_iterator<char>{std::cout," "});
}
//output
a b c a b c
2.输入流迭代器
可以使用输入流迭代器 istream_iterator
,通过迭代器抽象从输入流中读取值。它是一个接受元素类型作为模板类型参数的类模板。使用运算符>>
读取元素。可以使用 istream_iterator
作为算法和容器方法的来源。
template<typename InputIter>
auto sum(InputIter begin, InputIter end)
{
auto sum{*begin};
for(auto iter{++begin};iter!=end;++iter){
sum+=*iter;
}
return sum;
}
int main()
{
std::istream_iterator<int> numberIter{std::cin};
std::istream_iterator<int> endIter{};
int result{sum(numberIter,endIter)};
std::cout<<fmt::format("\n{}\n",result);
}