ostream_iterator为输出迭代器,可以翻看C++primer第五版iostream迭代器章节。书本中描述如下:
std::vector<int> iVec = {54,3,89,7};
std::ostream_iterator<int> out_iter(std::cout, " ");
copy(iVec.cbegin(), iVec.cend(), out_iter);
书中使用的是标准输出流。看到这种写法,妙啊!平时可能遇到将容器中的各元素以指定符号连接。比如字符串容器,想要将容器中的字符串相加,但中间以;分割。结果ab;cd;ef。正常写法,遍历后相加。
能不能使用ostream_iterator来实现呢?ostream_iterator提供了一种可能,查了下ostream_iterator的构造函数,参数只要是basic_ostream都可以,那就是ofstream以及ostringstream也可以。也就是写入文件和字符串流都可以,试了下ostreastream,代码如下:
#include <iostream>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
int main(int argc, char *argv[])
{
std::vector<int> iVec = {54,3,89,7};
std::ostream_iterator<int> out_iter(std::cout, " ");
copy(iVec.cbegin(), iVec.cend(), out_iter);
std::ostringstream oss;
std::vector<std::string> vec = {"ab","bc","de"};
std::vector<std::string> vec2 = { "ab", "bc", "de" };
std::ostream_iterator<std::string> outIter(oss, ";");
copy(vec.cbegin(),vec.cend(),outIter);
std::string spliceStr = oss.str();
std::cout << spliceStr << std::endl;
oss.str(""); // 清空
copy(vec2.cbegin(), vec2.cend(), outIter);
std::string spliceStr2 = oss.str();
std::cout << spliceStr2 << std::endl;
getchar();
return 0;
}
最后结果当然就如预料的那样,可行。ofstream也可以,网上有代码,我就不在这儿粘贴了