C++:矢量<对<矢量<int>,int> >
C++: vector <pair<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));
您可以使用<utility>
中的make_pair
来构造要初始化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>
是一个类型的名称。对于初始化,您需要一个值。
您可以通过调用该类型的构造函数来获得值(与在语句的顶层为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的答案。
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中