int **C = new int*[rows];
for(int i = 0; i < rows; i++){
C[i] = new int[cols];
for(int j = 0; j < cols; j++){
C[i][j] = 0;
}
}
我正在创建动态2-D数组,但是我们可以在不使用内部循环的情况下在所有条目中以0&#39; s初始化数组吗?
答案 0 :(得分:5)
如果您使用std::vector
,则只会是
std::vector<std::vector<int>> C(rows, std::vector<int>(cols));
答案 1 :(得分:3)
您可以使用value initialization
执行此操作int **C = new int*[rows]();
for(int i = 0; i < rows; i++)
{
C[i] = new int[cols]();
}
然而,std :: vector会更好(因为内存管理)。
答案 2 :(得分:2)
一种选择是使用std::fill功能:
int **C = new int*[rows];
for(int i = 0; i < rows; i++)
{
C[i] = new int[cols];
std::fill(C[i], C[i] + cols, 0);
}
答案 3 :(得分:0)
using namespace std::placeholders;
std::for_each(C, C + rows, std::bind(std::fill_n<int*, std::size_t, int>, _1, cols, 0));
或者如果经常重复使用:
auto fill_row = [] (int i) { return [=] (int* r) { std::fill_n(r, cols, i); }; };
std::for_each(C, C + rows, fill_row(0));