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

问题描述 投票:7回答:3

我有2D char矢量:

vector< vector<char> > matrix;

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

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

c++ vector resize
3个回答
15
投票

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

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

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

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

取决于矩阵是列为主还是行为主,您需要交换参数ROWCOL。第一个(外部矢量上的第一个参数)是您访问矩阵的第一个维度,即我假设您使用matrix[col][row]访问它。


1
投票
    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;

0
投票

虽然由@leemes给出的向量大小为默认值的构造是一个很好的答案,但有一种替代方法,无需使用其他向量并复制ctor:

assert(COL >= 0);
assert(ROW >= 0);
vector<vector<char>> matrix;
for (size_t i{0}; i != COL; ++i)
{
    matrix.emplace_back(ROW);
}
© www.soinside.com 2019 - 2024. All rights reserved.