gpt4 book ai didi

c++ - 为什么 std::generate() 和 std::generate_n() 需要不同的迭代器?

转载 作者:IT老高 更新时间:2023-10-28 12:50:15 29 4
gpt4 key购买 nike

我在看 generate()generate_n()在 cppreference 中,我试图理解为什么 generate() 需要 ForwardIterator,而 generate_n() 需要 OutputIterator范围? (我查了最新的标准工作草案,也是一样的要求。)

因为,至少它们可能的实现似乎需要相同的迭代器概念,而 OutputIterator 似乎就足够了:

generate():

template<class ForwardIt, class Generator>
void generate(ForwardIt first, ForwardIt last, Generator g)
{
while (first != last) {
*first++ = g();
}
}

generate_n():

template<class OutputIt, class Size, class Generator>
OutputIt generate_n(OutputIt first, Size count, Generator g)
{
for (Size i = 0; i < count; i++) {
*first++ = g();
}
return first;
}

std::fill()std::fill_n() 的情况相同。

最佳答案

at least their possible implementations seem to require identical iterator concept and OutputIterator seems to be enough

OutputIterator不支持相等/不等比较(包括您展示的 generate() 的可能实现中使用的 operator!=)和多 channel 保证,而 ForwardIterator做。这意味着 OutputIterator 不能用于通过 generate() 所需的两个迭代器(例如 [first, last))来表示范围>的界面。

Equality and inequality may not be defined for output iterators. Even if an operator== is defined, x == y need not imply ++x == ++y.

关于c++ - 为什么 std::generate() 和 std::generate_n() 需要不同的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45254161/

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