C++: 向量,int> >
这就是我想要做的...
vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>);
其中 x 是向量 var_name 的大小,y 是该对内向量的大小。
上面的语句不起作用,因为pair模板只允许常量。我怎样才能分别将我的向量调整为 x 和 y 的大小?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
将其简化为:
如果您喜欢自己的语法,那么您应该这样做:
Simplify it as:
If you like your own syntax, then you should be doing this:
您可以使用
中的make_pair
来构造您希望用于初始化vector
的对。例如:向量<对<向量,int> > var_name(x, make_pair(vector(y), 42))
或直接调用
pair,int>
构造函数(因为看起来你是试图):向量<对<向量,int> > var_name(x,pair<向量,int>(向量(y), 0))
You can use
make_pair
from<utility>
to construct the pair you wish to initialize yourvector
with. For example:vector< pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 42))
or call the
pair<vector<int>,int>
constructor directly (as it looks like you're trying to):vector< pair<vector<int>,int> > var_name(x, pair<vector<int>,int>(vector<int>(y), 0))
pair,int>
是类型的名称。对于初始化,您需要一个值。您可以通过调用该类型的构造函数来获取值(与在语句顶层对,int>(...).
var_name
执行的操作相同)。由于这是在表达式中创建内联值,而不是初始化变量,因此没有变量名称,我们只需编写类似pair,int>(...)
pair...
是构造函数的参数(将(y)
放在尖括号内的任何位置是不合逻辑的)。在我们的例子中,我们希望第一个值是长度为 y 的向量,第二个值是...... 0,我假设。所以我们得到
pair,int>(vector(y), 0)
。这相当笨重,这就是标准库提供模板函数std::make_pair
的原因。它通过使用自由函数(可以使用模板参数进行推断)来调用构造函数,绕过了无法为构造函数推断模板参数的事实。因此,上面的代码缩短为
make_pair(vector(y), 0)
,当将其代入该行的其余部分时,给出了 Benjamin Lindley 的答案。pair<vector<int>,int>
is the name of a type. For the initialization, you need a value.You get a value by calling the constructor of the type (the same way that, at the top level of the statement, you're doing for
var_name
). Since this is creating a value in-line in an expression, rather than initializing a variable, there is no variable name, and we just write something likepair<vector<int>,int>(...)
. The...
are the arguments for the constructor (putting(y)
anywhere inside the angle brackets is illogical). In our case, we want the first value to be a vector of length y, and the second value to be... 0, I assume.So we get
pair<vector<int>,int>(vector<int>(y), 0)
. That's rather unwieldy, which is why the standard library provides the template functionstd::make_pair
. It gets around the fact that template arguments can't be inferred for constructors, by using a free function (which can do inference with template arguments) to call the constructor.Thus the above shortens to
make_pair(vector<int>(y), 0)
, which, when substituted into the rest of the line, gives Benjamin Lindley's answer.