istream_iterator && istream_iteratorbuf

区别

对字符的默认处理

  • std::istream_iterator 默认跳过空白符(可以设置不跳,如std::noskipws)
  • std::istreambuf_iterator 不跳过。

效率

  • std::istreambuf_iterator更有效率,因为它避免对每个字符构造并析构一次sentry对象的开销。
void test_istreambuf_iterator()
{
	std::cout << " test istreambuf_iterator : " << std::endl;
	std::ifstream inFile{"./test.cpp" };
	std::istreambuf_iterator<char> start(inFile), end;
	std::ostreambuf_iterator<char> toStdin(std::cout);

	while (start != end)
	{
		*toStdin++ = *start++;
	}

	std::cout << std::endl;
}

void test_istream_iterator()
{
	std::cout << " test istream_iterator : " << std::endl;
	std::ifstream inFile("./test.cpp");
	std::istream_iterator<char> start(inFile), end;
	std::ostream_iterator<char> toStdin(std::cout);

	while (start != end)
	{
		*toStdin++ = *start++;
	}

	std::cout << std::endl;
}
posted @ 2020-04-15 23:29  sfdevs  阅读(299)  评论(0)    收藏  举报