gpt4 book ai didi

c++ - 使用 ostream_iterator 取消引用和递增

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:23 28 4
gpt4 key购买 nike

我从 http://en.cppreference.com/w/cpp/iterator/ostream_iterator/ostream_iterator 中找到了这段代码:

#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
std::ostream_iterator<int> i1(std::cout, ", ");
std::fill_n(i1, 5, -1);
std::ostream_iterator<double> i2(std::cout);
*i2++ = 3.14;
}

为什么在*i2++ = 3.14;中需要++

最佳答案

从概念上讲,当写入范围时,您希望在写入一个元素后移动到下一个元素。对于大多数迭代器,例如一个 std::vector::iterator,必须显式完成。因此,将它包括在内是有道理的,即使只是为了保持一致性。

std::ostream_iterator 的特殊情况下,它没有实际效果,可以忽略不计。无论如何,您不能覆盖输出范围的“元素”,前进是隐式的(并且只是隐式的,即在这种情况下,增量运算符和取消引用都是空操作)。

重要的部分只有operator = ,如相关文档中所述:

#include <iostream>
#include <iterator>

int main()
{
std::ostream_iterator<int> i1(std::cout, ", ");
*i1++ = 1; // usual form, used by standard algorithms
*++i1 = 2;
i1 = 3; // neither * nor ++ are necessary
std::ostream_iterator<double> i2(std::cout);
i2 = 3.14;
}

关于c++ - 使用 ostream_iterator 取消引用和递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48085451/

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