iota 模板函数已添加到标准库中,以用递增的值序列填充迭代器范围。
template<typename ForwardIterator, typename Tp>
void
iota(ForwardIterator first, ForwardIterator last, Tp value)
{
for (; first != last; ++first)
{
*first = value;
++value;
}
}
<numeric>
中的大多数其他模板具有接受用户指定运算符的版本。
有了这个:
template<typename ForwardIterator, typename Tp, typename Operator>
void
iota(ForwardIterator first, ForwardIterator last, Tp value, Operator op)
{
for (; first != last; ++first)
{
*first = value;
op(value);
}
}
如果你不想(或不能)为 Tp 重载 operator++() 会很方便。我会发现这个版本比默认的 operator++() 版本更广泛使用。 <
最佳答案
我怀疑原因是以下一种或多种原因的常见组合:
- 没有人提交提案
- 它被认为对于这个版本来说不够重要(已经巨大,而且已经很晚了)
- 它被遗忘了(就像 C++98 中的
copy_if
) - 使用
std::generate
很容易替换。
关于c++ - 他们为什么不添加 iota 的运营商版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619315/