gpt4 book ai didi

c++ - ostream_iterator increment应该在什么情况下使用?

转载 作者:搜寻专家 更新时间:2023-10-31 00:46:48 26 4
gpt4 key购买 nike

std::istream_iterator<std::string> ist(std::cin);
std::istream_iterator<std::string> eof;
std::vector<std::string> str_vec(ist, eof);
std::ofstream ofs("a");
if (!ofs) {
throw std::runtime_error("Open file failed.");
}
std::ostream_iterator<std::string> ost(ofs, "\n");
for (size_t index = 0; index != str_vec.size(); ++index) {
//*ost = str_vec[index];
*ost++ = str_vec[index];
}

无论是否使用 *ost++,我得到的结果都是一样的。我知道 istream_iterator 增量的含义。但是在什么情况下应该使用ostream_iterator增量呢?

谢谢!

最佳答案

进一步的实验可能表明您甚至不需要取消对迭代器的引用就可以使其工作。 :)

ost = str_vec[index];

所有这些无操作方法都是为流迭代器提供与其他迭代器类似的接口(interface)所必需的。

除了手动循环,您还可以使用 std::copy 算法。 (因为这几乎是 ostream_iterator 的全部用处,所以这种方法回答了您的问题:您根本不需要在自己的代码中弄乱这些迭代器!)

 std::copy(str_vec.begin(), str_vec.end(), std::ostream_iterator<std::string>(ofs, "\n"));

考虑到复制函数模板的编写方式,可能会清楚需要递增和取消引用的位置:

template <class InIter, class OutIter>
void copy(InIter begin, InIter end, OutIter result)
{
for (InIter it = begin; it != end; ++it)
*result++ = *it; // <-- here, result might be almost any kind of iterator
}

关于c++ - ostream_iterator increment应该在什么情况下使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com