这就是我的目标...
vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>);
其中 x 是向量 var_name 的大小,y 是对内向量的大小。
上面的语句不起作用,因为 pair 模板只允许常量。我怎样才能让我的向量分别大小为 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));
您可以使用make_pair
from<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))
pair<vector<int>,int>
是一种类型的名称。对于初始化,您需要一个值。
您可以通过调用该类型的构造函数来获得一个值(与在语句的顶层执行 for 的方式相同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)
,当替换到该行的其余部分时,给出了 Benjamin Lindley 的答案。