[英]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 )
表示調用一個函數。 但是y
和DynTable
不是函數,因此會出現錯誤。
我認為您打算使用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.