這就是我的目標是什麼?C++:矢量<對<vector<int>,INT>>
vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>);
其中x是矢量VAR_NAME和y的大小是裏面的向量的大小對。
上述語句不起作用,因爲對模板只允許常量。我怎麼能讓我的矢量分別大小爲x和y?
這就是我的目標是什麼?C++:矢量<對<vector<int>,INT>>
vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>);
其中x是矢量VAR_NAME和y的大小是裏面的向量的大小對。
上述語句不起作用,因爲對模板只允許常量。我怎麼能讓我的矢量分別大小爲x和y?
vector<pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 0));
簡化爲:
pair<vector<int>,int> value(vector<int>(y), 0);
vector<pair<vector<int>,int> > var_name(x, value);
如果你喜歡你自己的語法,那麼你應該這樣做:
vector<pair<vector<int>,int> > var_name(x, std::make_pair(vector<int>(y), 0));
真棒!有效。 – 2011-06-13 18:04:52
pair<vector<int>,int>
是一個類型的名稱。對於初始化,你需要一個值。
您通過調用類型的構造函數來獲取值(與語句頂級相同,您正在爲var_name
執行操作)。由於這是在表達式中創建一個內聯值,而不是初始化一個變量,所以沒有變量名,我們只是寫一些像pair<vector<int>,int>(...)
這樣的東西。 ...
是構造函數的參數(將(y)
放在尖括號內的任何地方都是不合邏輯的)。在我們的例子中,我們希望第一個值是一個長度爲y的向量,第二個值是... 0,我假設。我們得到pair<vector<int>,int>(vector<int>(y), 0)
。這相當笨拙,這就是爲什麼標準庫提供模板功能std::make_pair
。它通過使用免費函數(其中可以推斷模板參數)來調用構造函數來解決建模器無法推斷出模板參數的事實。
因此,上述縮短到make_pair(vector<int>(y), 0)
,當它被替換成其餘的行,給本傑明林德利的答案。
您可以使用make_pair
來自<utility>
來構建想要初始化vector
的對。例如:
vector< pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 42))
或直接調用pair<vector<int>,int>
構造函數(因爲它看起來像你想):
vector< pair<vector<int>,int> > var_name(x, pair<vector<int>,int>(vector<int>(y), 0))
不錯! make_pair ...爲什麼我沒有想到這一點? – 2011-06-13 18:06:27