簡體   English   中英

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

[英]How can I resize a 2D C++ vector?

我有一個二維char向量:

vector< vector<char> > matrix;

我將讀取一個矩陣作為輸入並將其存儲在該向量中。 我的向量的大小是固定的,是 ROW x COL。 我想我需要為每一行和每一列調整它的大小。

如何在不占用額外內存(正確調整大小)的情況下完成它?

鑒於向量為空,您可以簡單地使用預先分配的內部向量調整外部向量的大小,而無需循環:

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

或者,在初始化或要重置非空 vector 時,可以使用構造函數重載獲取大小和初始值來初始化所有內部向量:

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

根據您的矩陣是列主矩陣還是行主矩陣,您需要交換參數ROWCOL 第一個(外部向量的第一個參數)是您訪問矩陣的第一個維度,即我假設您使用matrix[col][row]訪問它。

    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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM