亲爱的所有人,
我使用矢量向量,说vector<vector<int> > no_1_2
来存储两个vector<int>
容器的元素,比如no1&amp; NO2。所以例如我会说,no1 = {2,5,7,10,3}和no2 = {21,34,15}。
我想将这两个向量存储在一个名为no_1_2的容器中,我在两个'for'循环中使用了no_1_2[0].push_back(no1.at(i))
和no_1_2[1].push_back(no2.at(j))
。但是,我得到了错误。无论如何要解决这个问题?
我不能push_back向量的向量?任何帮助请.. 感谢
抱歉,这是我的代码的一部分, //这里有一些类和一些代码vector< vector<int> > final_list(int code1,int code2){
vector<vector<int> > no_1_2;
vector<int> in;
vector<int> out;
for (int foo=0;foo<size();foo++){
int a_point=foo;
if (at(a_point).Code()==code1){
vector<int> closer_points;
closer_points=at(foo).Closers();
for (int fee=0;fee<closer_points.size();fee++){
int a_neb_point=closer_points.at(fee);
if (at(a_neb_point).Code()==code2){
in.push_back(a_point);
out.push_back(a_neb_point);
}
}
}
}
/remove duplicates // above in and out vectors containing some values repeatedly, so, i remove the duplicates here
for(vector<int>::iterator i=in.begin();i!=in.end();i++){
sort(in.begin(),in.end());
in.erase(unique(in.begin(),in.end()),in.end());
no_1_2[0].push_back(*i);
}
for(vector<int>::iterator o=out.begin();o!=out.end();o++){
sort(out.begin(),out.end());
out.erase(unique(out.begin(),out.end()),out.end());
no_1_2[1].push_back(*o);
}
return no_1_2;
}
int main (){
// some code
vector< vector <int> > in_out=mylist.final_list(34,1); //here i just tried for code values for (34, 1), like that i have many sets
}
答案 0 :(得分:4)
在没有看到您的实际代码和错误的情况下,让我猜一下:
在您访问no_1_2.resize(2)
或no_1_2[0]
no_1_2[1]
编辑:看到代码后,上面不再猜测:
您无法no_1_2[0].push_back(*i);
- no_1_2
为空,而您正在尝试访问no_1_2[0]
。您需要在循环之前调整它的大小。
EDIT2:
将您的排序/唯一/擦除移到循环之外,并使用assign或operator =:
sort(in.begin(),in.end());
in.erase(unique(in.begin(),in.end()),in.end());
no_1_2[0].assign(in.begin(), in.end());
// OR: no_1_2[0] = in;
答案 1 :(得分:1)
std::vector::at
将引用返回到向量中位置n
的元素。
std::vector<int> vec(2);
vec[0] = 0;
vec[1] = 1;
cout << vec.at(0) ; // returns 0 but not the vector.
因此,为了返回一个向量,该位置的值必须是一个向量,而在你提到的向量no1
,no2
中则不是这种情况。
std::vector< std::vector<int> > no_1_2;
std::vector<int> no1(5), no2(3) ;
// Assigning values to vector of integers no1, no2
no_1_2.push_back(no1);
no_1_2.push_back(no2);
no_1_2.at(0) ; // This returns std::vector<int>
no_1_2[0].push_back(*i);
,no_1_2[1].push_back(*o);
是错误。您需要调整矢量大小,因为在 no_1_2,in,out 声明时,未提及容器的大小。
vector<vector<int>> no_1_2 ;
vector<int> in;
vector<int> out;
由于未提及 no_1_2 的size
,因此在其上使用[]
会出错。但是,一旦在 push_back 之后,它就有效了。示例 -
vector<int> temp;
temp[0] = 10; // Error : What is temp[0] ? size of temp is 0 and where would the `[0]` take to.
temp.push_back(10); // Increased the size of vector
temp[0] = 30 ; // And this is now valid.
答案 2 :(得分:0)
我假设您没有正确分配矢量矢量。
vector< vector<int> > vectors;
vectors.resize(2);
FWIW,你没有对向量的向量进行push_back,你正在从向量no2到向量no_1_2 [1]进行int的push_back。