如何清除C++; 可以请你告诉我,如何在C++中清除2D向量。 我必须在需要读入矩阵、处理和清除矩阵的地方编写程序,并为下一次读取操作做好准备。我已使用向量>我正在填充但无法重置创建二维数组。以下是参考代码 #include<iostream> #include<vector> #include<algorithm> using namespace std; #define MAX 501 typedef std::vector<std::vector<int>> vec2d; vec2d matrix(MAX , std::vector<int>(MAX, 0)); void main() { int tc; int N; for(tc =0 ; tc < 20;tc++) { int temp; scanf("%d",&N); int result =0; for(int i = 0; i < N;i++) { for(int j=0; j<N;j++) { scanf("%d",&temp); matrix[i][j]=temp; } } // Do Some processing with 2D vectory Array matrix.clear(); // Now I want to clear 2D vector but only vector contents, and get ready for new input reading // How do I do it with 2d Vector ? cout << result << endl; } } #包括 #包括 #包括 使用名称空间std; #定义最大值501 typedef std::vectorvec2d; 向量2D矩阵(最大,标准::向量(最大,0)); void main() { int tc; int N; 用于(tc=0;tc

如何清除C++; 可以请你告诉我,如何在C++中清除2D向量。 我必须在需要读入矩阵、处理和清除矩阵的地方编写程序,并为下一次读取操作做好准备。我已使用向量>我正在填充但无法重置创建二维数组。以下是参考代码 #include<iostream> #include<vector> #include<algorithm> using namespace std; #define MAX 501 typedef std::vector<std::vector<int>> vec2d; vec2d matrix(MAX , std::vector<int>(MAX, 0)); void main() { int tc; int N; for(tc =0 ; tc < 20;tc++) { int temp; scanf("%d",&N); int result =0; for(int i = 0; i < N;i++) { for(int j=0; j<N;j++) { scanf("%d",&temp); matrix[i][j]=temp; } } // Do Some processing with 2D vectory Array matrix.clear(); // Now I want to clear 2D vector but only vector contents, and get ready for new input reading // How do I do it with 2d Vector ? cout << result << endl; } } #包括 #包括 #包括 使用名称空间std; #定义最大值501 typedef std::vectorvec2d; 向量2D矩阵(最大,标准::向量(最大,0)); void main() { int tc; int N; 用于(tc=0;tc,c++,vector,stl,C++,Vector,Stl,,在C++11中有两种方法 std::for_each(matrix.begin(), matrix.end(), [](std::vector<int>& v) { std::fill(v.begin(), v.end(), 0); }); 您还可以使用常规for循环 for (size_t y = 0; y < matrix.size(); y++) { for (size_t x = 0; x < matrix[y].size(); x++

,在C++11中有两种方法

std::for_each(matrix.begin(), matrix.end(), [](std::vector<int>& v)
{
    std::fill(v.begin(), v.end(), 0);
});
您还可以使用常规for循环

for (size_t y = 0; y < matrix.size(); y++)
{
    for (size_t x = 0; x < matrix[y].size(); x++)
    {
        matrix[y][x] = 0;
    }
}
for(size_t y=0;y
另一种选择是:

matrix = vec2d(MAX , std::vector<int>(MAX, 0));

很抱歉在这里迟到了,事实上我不知道2014年的编码。 我有一个结果, 我希望你能试试memset

 memset(matrix,0,sizeof(matrix));

如果覆盖它,则无需先将值重置为
0
。我需要问一下。如果只是要重新分配值,为什么还要麻烦将其重置为0?这是必需的,因为矩阵不会完全填充,而是部分填充。因此,在处理时,需要将空值重置为0或其他负值。尽管在上面的代码中,我正在执行s如果我们谈论的是C++11,那么(auto elem&:matrix)std::fill(elem.begin(),elem.end(),0)的范围如何?谢谢您的好话!不幸的是,它执行动态内存分配的效率较低。缓存该值可能比每次简单地分配一个新向量要高一点,但不幸的是,它不可扩展,因为当作者决定用0以外的数字填充时,它会很快变得混乱。不可原谅当然,现在你将永远在内存中保留一些无用的数据。我觉得这个选项对我来说更合适,而不是每次重复整个数组(501 x 501项)clear@Sandeep:请注意,在木材下,它将进行循环或等效操作。
static const vec2d matrix_zero = vec2d(MAX , std::vector<int>(MAX, 0));
matrix = matrix_zero;
 memset(matrix,0,sizeof(matrix));