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

时间:2013-11-18 12:21:21

标签: c++ vector resize

我有一个2D char向量:

vector< vector<char> > matrix;

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

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

3 个答案:

答案 0 :(得分:13)

鉴于向量为空,您只需使用预先分配的内部向量调整外部向量的大小,而无需循环:

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

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

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

根据您的矩阵是专栏还是行专业,您需要交换参数ROWCOL。第一个(外部向量上的第一个参数)是您访问矩阵的第一个维度,即我假设您使用matrix[col][row]访问它。

答案 1 :(得分: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;

答案 2 :(得分: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);
}