c++ - 他们为什么不添加 iota 的运营商版本?

标签 c++ c++11 iota

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/

相关文章:

c++ - 局部变量的地址是 constexpr 吗?

c++ - 使用 make_shared 和 make_unique 时需要检查 nullptr 吗?

c++ streaming io/Design a stringstream+custom streambuf 或在 char 数组上使用 mem 工具?

c++ - 是否可以通过#define 将 g++ 设置为遵循 C++11 ISO (-std=c++11)?

c++ - 从 vector C++ 返回结构元素

haskell - 在 Haskell 中实现 Iota

c++ - 使用 CMake 编译 CUDA 时出现错误 "undefined reference to ` __cudaRegisterLinkedBinary"

c++ - 默认构造函数调用

c++ - 按降序填充数组 C++ 不排序