小编Sof*_*yan的帖子

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

我正在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

std::fill()和相同的故事std::fill_n().

c++ iterator language-lawyer

27
推荐指数
3
解决办法
1550
查看次数

标签 统计

c++ ×1

iterator ×1

language-lawyer ×1