用元素初始化2d矩阵

时间:2014-01-22 22:36:35

标签: c++ visual-studio-2012 c++11

我想编写一个非常简单的函数来创建一个特定大小的矩阵,其函数允许我初始化矩阵中的元素。简单的东西,但我想同时尝试更多的C ++ 11功能。

template<class T, class Generator>
vector<vector<T> > create_matrix(int nr_rows, int nr_cols, Generator& gen) {
    vector<vector<T> > matrix(nr_rows, vector<T>(nr_cols));
    for (auto& row : matrix) {
        generate_n(row.begin(), row.end(), gen);
    }
    return matrix;
}

// calling code
mt19937 engine;
uniform_int_distribution<int> dist(0, 9);
vector<vector<int> > matrix_a = create_matrix<int>(3, 4, [&]() {
    return dist(engine);
});

编译失败,

1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm(1562): error : no operator "+" matches these operands
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm(1532): error : no operator "<" matches these operands

在Visual Studio 2012下(CUDA SDK没有对VS2013的官方支持,所以没有选择)。那么我做错了什么以及如何解决它?

1 个答案:

答案 0 :(得分:0)

愚蠢的错误 - generate_n确实将size参数作为第二个参数而不是迭代器。为什么错误信息必须完全无用,这超出了我的意思,但那时它是c ++ - 我还能期待什么呢?