C++ 向量

C++ 向量,c++,C++,亲爱的各位, 我使用了向量的向量,比如向量no_1_2来存储两个向量容器的元素,比如no1和no2。例如,我会说,no1={2,5,7,10,3}和no2={21,34,15} 我想将这两个向量存储在一个名为no_1_2的容器中,我使用了no_1_2[0]。push_backno1.ati和no_1_2[1]。push_backno2.atj在两个“for”循环中。但是,我错了。有没有办法解决这个问题 我不能推回向量的向量吗?请帮忙。。 谢谢 抱歉,这是我的部分代码, //这里有一些类和代码 v

亲爱的各位, 我使用了向量的向量,比如向量no_1_2来存储两个向量容器的元素,比如no1和no2。例如,我会说,no1={2,5,7,10,3}和no2={21,34,15}

我想将这两个向量存储在一个名为no_1_2的容器中,我使用了no_1_2[0]。push_backno1.ati和no_1_2[1]。push_backno2.atj在两个“for”循环中。但是,我错了。有没有办法解决这个问题

我不能推回向量的向量吗?请帮忙。。 谢谢

抱歉,这是我的部分代码, //这里有一些类和代码

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
}

在没有看到您的实际代码和错误的情况下,让我猜猜:

在访问no_1_2[0]或no_1_2[1]之前,您没有调用no_1_2.resize2

编辑:在看到代码后,以上不再是猜测:

无法执行no_1_2[0]。请将_向后推*i;-no_1_2为空,您正在尝试访问no_1_2[0]。在循环之前,需要调整其大小

编辑2:

将排序/唯一/擦除移到循环之外,并使用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;

在没有看到您的实际代码和错误的情况下,让我猜猜:

在访问no_1_2[0]或no_1_2[1]之前,您没有调用no_1_2.resize2

编辑:在看到代码后,以上不再是猜测:

无法执行no_1_2[0]。请将_向后推*i;-no_1_2为空,您正在尝试访问no_1_2[0]。在循环之前,需要调整其大小

编辑2:

将排序/唯一/擦除移到循环之外,并使用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;

我假设你没有正确分配向量

vector< vector<int> > vectors; 
  vectors.resize(2); 

FWIW,你不是在做向量的推回,你是在做从向量no2到向量nou1的int的推回[1]

我假设您没有正确分配向量

vector< vector<int> > vectors; 
  vectors.resize(2); 
FWIW,你不是在做向量的推回,你是在做从向量no2到向量nou1的int的推回[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.
否\u 1\u 2[0]。将\u向后推*i;,否_1_2[1]。将_向后推*o;这些都是错误。您需要调整向量大小,因为在no_1_2、in、out声明时,没有提到容器的大小

vector<vector<int>> no_1_2 ;
vector<int> in;
vector<int> out;
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.
否\u 1\u 2[0]。将\u向后推*i;,否_1_2[1]。将_向后推*o;这些都是错误。您需要调整向量大小,因为在no_1_2、in、out声明时,没有提到容器的大小

vector<vector<int>> no_1_2 ;
vector<int> in;
vector<int> out;

另外,在编辑答案时复制粘贴代码也不会花太长时间。最近有很多这样的事情-用英语而不是代码发布了一些解释。要删除重复项-std::unique有什么问题吗?还有,在编辑答案时复制粘贴代码应该不会花太长时间。最近有很多这样的事情-用英语而不是代码发布了一些释义。要删除重复项-std::unique有什么问题?@Erik-感谢您的更正。OP应该将你的答案标记为已接受而不是我的:@Mahesh:no_1_2是一个向量-no_1_2[0]是一个向量vector@Mahesh:太好了:如果你修改了你的答案,使被接受的答案是正确的,我将删除我的评论。艾瑞克和马赫什,非常感谢你。我是C++新手。所以,我需要你所有的评论。因此,请保留所有评论。因此,特别感谢埃里克的合作。:-@埃里克,再次谢谢你。现在使用resize命令和assign修复了错误,现在我的代码变得更短了。thanks@Erik-谢谢你的更正。OP应该将你的答案标记为已接受而不是我的:@Mahesh:no_1_2是一个向量-no_1_2[0]是一个向量vector@Mahesh:太好了:如果你修改了你的答案,使被接受的答案是正确的,我将删除我的评论。艾瑞克和马赫什,非常感谢你。我是C++新手。所以,我需要你所有的评论。因此,请保留所有评论。因此,特别感谢埃里克的合作。:-@埃里克,再次谢谢你。现在使用resize命令和assign修复了错误,现在我的代码变得更短了。thanks@Erik-我只是提供了std::vector::at的示例,在我发布它时,OP已经更新了这个问题。无论如何,谢谢你指出我犯的错误。@Erik-我只是提供了std::vector::at的例子,在我发布它的时候,OP已经更新了这个问题。不管怎样,谢谢你指出我犯的错误。