C++ 向量列表
我试图找出如何正确使用向量列表 我知道如何申报C++ 向量列表,c++,list,object,vector,C++,List,Object,Vector,我试图找出如何正确使用向量列表 我知道如何申报 list< vector<int> > variableName; listvariableName; 但我不知道如何实际设置它或从中提取任何信息 更具体地说,我正在尝试制作一个对象向量列表,我希望能够设置并从中提取信息 list< vector<ClassObject> > listOfVectorsOfClass; listlistOfVectorsOfClass; 有人能帮我吗?你想要样
list< vector<int> > variableName;
listvariableName;
但我不知道如何实际设置它或从中提取任何信息
更具体地说,我正在尝试制作一个对象向量列表,我希望能够设置并从中提取信息
list< vector<ClassObject> > listOfVectorsOfClass;
listlistOfVectorsOfClass;
有人能帮我吗?你想要样品吗
list< vector<int> > variableName;
variableName.push_back({1, 2, 3});
variableName.push_back({4, 2, 6});
for (auto &v : variableName)
{
for (auto &x : v)
cout << x << " ";
cout << endl;
}
listvariableName;
variableName.push_back({1,2,3});
variableName.push_back({4,2,6});
用于(自动&v:variableName)
{
用于(自动和x:v)
cout您可以使用迭代器访问信息:
list< vector<ClassObject> >::iterator list_it;
vector<ClassObject>::iterator vec_it;
for (list_it = listOfVectorOfClass.begin(); list_it != listOfVectorOfClass.end();
++ list_it)
{
for (vec_it = list_it->begin(); vec_it != list_it->end(); ++ vec_it)
{
//do something with vec_it
//for example call member function of Class
(*vec_it).print();
}
}//can use const_iterator depends on what you will do on class objects
list::迭代器列出它;
向量::迭代器vec_it;
for(list_it=listOfVectorOfClass.begin();list_it!=listOfVectorOfClass.end();
++列出(it)
{
对于(vec_it=list_it->begin();vec_it!=list_it->end();++vec_it)
{
//用它做点什么
//例如,调用类的成员函数
(*vec_it).print();
}
}//能否使用常量迭代器取决于您将对类对象执行的操作
这与访问int
\include>的向量列表是一样的
#include <cstdio>
#include <list>
#include <vector>
#include <iterator>
int main(){
std::list< std::vector<int> > li;
li.push_back(std::vector<int>());
li.push_back(std::vector<int>());
std::vector<int> v3(3);
v3.push_back(1);
v3.push_back(2);
v3.push_back(3);
li.push_back(v3);
for (std::list<std::vector<int> >::iterator it1 = li.begin(); it1 != li.end(); ++it1){
std::vector<int>::iterator it2;
for (it2 = (*it1).begin(); it2 != (*it1).end(); ++ it2){
std::printf("element: %d\n",(*it2));
}
}
return OK;
}
#包括
#包括
#包括
int main(){
std::listli;
li.push_back(std::vector());
li.push_back(std::vector());
std::vectorv3(3);
v3.推回(1);
v3.推回(2);
v3.推回(3);
li.推回(v3);
对于(std::list::迭代器it1=li.begin();it1!=li.end();++it1){
std::vector::迭代器it2;
对于(it2=(*it1.begin();it2!=(*it1.end();++it2){
std::printf(“元素:%d\n”,(*it2));
}
}
返回OK;
}
如果您熟悉新的C++11语法,那么它可能会更简单:
std::list< std::vector<int> > li;
li.push_back({1, 2, 3});//push_back vector
li.push_back({4, 5, 6});//again, vector implicitly
for (auto &v : li)
{
//even better auto const since we need read only access to elements
for (auto const &i : v)
std::printf("element: %d\n",i);
}
std::listli;
li.push_-back({1,2,3});//push_-back向量
li.push_back({4,5,6});//同样,向量隐式
适用于(汽车和车辆:li)
{
//更好的auto-const,因为我们需要对元素的只读访问
用于(自动常数和i:v)
std::printf(“元素:%d\n”,i);
}
你可以像对待几乎任何其他对象一样对待向量列表。你的代码在哪里显示了你试图从中提取信息的地方,以及你得到的错误是什么?依我看,你是从错误的方向来处理这个问题的。你为什么认为你首先应该使用它?你认为呢ant完成?+1,但您可以直接使用list\u it->begin()在内部循环中,@ MasHh是的,同意。现在就更新它,为什么地球上的迭代器在它们的for循环之外?这是完美的!向量列表真的很混乱,但是你真的为我奠定了基础。在向我展示它之后,它就更有意义了。还有一点迷惑,所以我必须慢慢地移动B。但我想我可以从这里开始。非常感谢你们!@tacp,这是因为…?C++11和printf
,哎哟!我知道它有点混合,但不是禁止的,对吧?当然不是禁止的(这就是为什么它不值得投反对票,尽管不幸的是也不值得投反对票)但是如果你使用了“命名空间STD ”从“<代码> >而不是<代码>使用C++版本,你至少应该适当地限定它(<代码> STD::Prtff)。@ ChristianRau,你总是可以找到一些帖子来投票,这并不难。