我想编写一个非常简单的函数来创建一个特定大小的矩阵,其函数允许我初始化矩阵中的元素。简单的东西,但我想同时尝试更多的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的官方支持,所以没有选择)。那么我做错了什么以及如何解决它?
答案 0 :(得分:0)
愚蠢的错误 - generate_n
确实将size参数作为第二个参数而不是迭代器。为什么错误信息必须完全无用,这超出了我的意思,但那时它是c ++ - 我还能期待什么呢?