如何调整2D C++向量的大小

How can I resize a 2D C++ vector?

本文关键字:向量 C++ 2D 何调整 调整      更新时间:2023-10-16

我有一个2D char矢量:

vector< vector<char> > matrix;

我将读入一个矩阵作为输入,并将其存储在该向量中。向量的大小是固定的,是ROW x COL。我想我需要为每一行和每一列调整它的大小。

如何在不占用额外内存(正确调整大小)的情况下完成它?

如果向量为空,您可以简单地使用预先分配的内部向量调整外部向量的大小,而无需循环:

matrix.resize(ROW, vector<char>(COL));

或者,当初始化时,或者如果您想重置非空向量,您可以使用具有大小和初始值的构造函数重载来初始化所有内部向量:

matrix = vector<vector<char> >(ROW, vector<char>(COL));

我假设你用matrix[row][col]访问它。在C++中,矩阵通常按行主顺序存储。如果您想要列的主要顺序,您需要交换参数ROWCOL

    const size_t ROW = 10;
    const size_t COL = 20;
    std::vector<std::vector<char>> v;
    v.resize( ROW );
    std::for_each( v.begin(), v.end(), 
                   std::bind2nd( std::mem_fun_ref( &std::vector<char>::resize ), COL ) );
    std::cout << "size = " << v.size() << std::endl;
    for ( const std::vector<char> &v1 : v ) std::cout << v1.size() << ' ';
    std::cout << std::endl;

虽然@leemes给出的以大小向量为默认值的构建是一个很好的答案,但有一种不使用额外向量和复制因子的替代方案:

assert(COL >= 0);
assert(ROW >= 0);
vector<vector<char>> matrix;
for (size_t i{0}; i != COL; ++i)
{
    matrix.emplace_back(ROW);
}