我已经编写了这段代码,并希望在vector<vector>
中插入一个值,如下所示:
v.push_back(vector<pair<int,string> >({1,"A"}));
但是它显示了一个错误,我想知道为什么这是不可能的。
插入空值的工作原理:
v.push_back(vector<pair<int,string> >({}));
下面是代码:
#include<bits/stdc++.h>
using namespace std;
void printVec(vector<pair<int,string> > &v){
cout << "Size: " << v.size() << endl;
for(int i=0; i<v.size(); i++)
{
cout << v[i].first << " " << v[i].second << endl;
}
}
int main()
{
vector<vector<pair<int,string> > > v;
int N;
cin >> N;
for(int i=0; i<N; i++)
{
int n;
cin >> n;
v.push_back(vector<pair<int,string> >({}));
for(int j=0; j<n; j++)
{
int x;
string s;
cin >> x >>s;
v[i].push_back({x,s});
}
}
v.push_back(vector<pair<int,string> >({})); // UNABLE TO STORE A PAIR AT THE END. ONLY CAN ADD EMPTY PAIR. DON'T KNOW WHY??
// v.push_back({}); // USING ANY OF THEM
for(int i=0; i<v.size(); i++)
{
printVec(v[i]);
}
}
2条答案
按热度按时间icomxhvb1#
如果你想用
{1,"A"}
作为std::initializer_list
构造函数的一个元素的初始化器来列表初始化你的向量,你需要使用大括号,而不是圆括号:或者,如果你不确定如何直接初始化向量中的元素,或者你还没有学过上面的内容,那么只需定义一个变量来临时保存你想推入
v
的内部向量,将pair元素推入其中,然后使用该变量,这样你就不必猜测任何事情了:vector<pair<int,string> >({})
可以工作,因为{}
参数可以将std::vector
的std::initializer_list
-构造函数的std::initializer_list
直接初始化为空。最初尝试中的一组附加括号也可以以相同的方式工作,尽管这样括号将是多余的。mf98qq942#
这里你推的是一个对子而不是对子的向量。
这样做是因为它把({})看作是一个空向量对。
尽管以下方法有效: