如何在C++中清除2D Vector

zpgglvta  于 2023-07-01  发布在  其他
关注(0)|答案(3)|浏览(143)

有没有人可以给我建议一下,如何在C++中清除2D向量。我必须写程序,我需要读在矩阵,过程和清除矩阵,并准备下一个读取操作。我已经创建了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;
    }
}
sshcrbum

sshcrbum1#

下面是C++11中的两种方法:

std::for_each(matrix.begin(), matrix.end(), [](std::vector<int>& v)
{
    std::fill(v.begin(), v.end(), 0);
});

for(auto& elem : matrix) std::fill(elem.begin(), elem.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;
    }
}
tjjdgumg

tjjdgumg2#

另一个替代方案是:

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

为了避免每次分配,您可以缓存该值:

static const vec2d matrix_zero = vec2d(MAX , std::vector<int>(MAX, 0));

每次你想重置矩阵时:

matrix = matrix_zero;
bkhjykvo

bkhjykvo3#

很抱歉,在这里迟到了,实际上我在2014年不知道编码。我已经得到了一个结果,希望你可以用memset试试。

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

相关问题