ostream_iterator输出流迭代器的使用

  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也可以,网上有代码,我就不在这儿粘贴了

猜你喜欢

转载自blog.csdn.net/zxgmlcj/article/details/84106282
今日推荐