簡體   English   中英

為向量分配內存 <vector<> &gt;捷徑

[英]Allocate memory for vector<vector<> > the short way

我正在寫一個需要2D數組並想使用2D向量的類。 但是,我需要先將2D數組聲明為私有數組,然后在構造函數中分配內存。 當我以下列方式進行操作時,出現“沒有適當的operator()或沒有將函數轉換為指針到函數類型的調用類類型的對象”錯誤。 有人可以幫我嗎?

class Test {

private:
    vector<vector<unsigned int> > DynTable;

public:
    Test(const string &s1, const string &s2) {
        const size_t len1 = s1.size(), len2 = s2.size();
        DynTable(len1 + 1, vector<unsigned int>(len2 + 1));

DynTable是一個變量。 您的代碼就像:

int y;
y(5);

表達式變量名 ( expression )表示調用一個函數。 但是yDynTable不是函數,因此會出現錯誤。

我認為您打算使用ctor-initializer列表:

Test(const string &s1, const string &s2)
    : DynTable( s1.size() + 1, vector<unsigned int>(s2.size() + 1) )
{
    // other code here perhaps
}

在ctor-initializer列表中,它不是表達式,而是初始化語法。 在初始化列表的上下文中, ( )分隔參數用於初始化變量。

另一種選擇是在構造函數主體中編寫

DynTable = vector<vector<unsigned int>>(len1 + 1, vector<unsigned int>(len2 + 1));

但是,這會更糟,因為它的類型更多,而且會進行默認構造,然后進行分配,而不是直接構造您想要的構造。

暫無
暫無

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

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