c++ - 使用 std::generate 生成矩阵

标签 c++ c++11 std

使用 reference . std::generate 的行为应该等同于:

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

但是当我尝试用 0-99 数字填充矩阵时。相反,我得到 10 行 0-9。这是为什么?

std::vector< std::vector<int> > m;

#ifdef GENERATE
    struct Generator{
        int seq;
        Generator():seq(0){};
        int operator()(){return seq++;};
    } generator;
#elif defined FOR_EACH
    int i = 0;
    auto increment = [&i](int &a){a = i++;};
#endif

int x = 10, y = 10;
m.resize(x);
for(auto &v : m)
{
    v.resize(y);
    #ifdef GENERATE
        generate(begin(v), end(v), generator);
    #elif defined FOR_EACH
        for_each(begin(v),end(v), increment);
    #endif
}

最佳答案

您也可以使用 std::ref防止复制生成器对象:

generate(begin(v), end(v), std::ref(generator));

关于c++ - 使用 std::generate 生成矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19219015/

相关文章:

c++ - 一个来源有多个对象

c++ - C++并发编程中的双重检查锁定模式

c++ - std::forward<T> 和 std::forward<decltype(t)> 有什么区别?

c++ - 使用 C 和 C++ 文件编译库时发出警告

qt - 折线图中的数据标签 Qt Charts

c++ - 如何在 C++ 控制台应用程序中输出波兰语字符?

c++ - C中整数到字符的转换

c++ - 在 C++ 中仅使用 std::string 而不是 char 数组和 std::vector/list 而不是数组是否有任何实际限制?

c++ - 使用迭代器从 'find' 或 'remove' 删除

c++ - 为什么我可以将dynamic_cast转换为非虚拟类?