Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量列表_C++_List_Object_Vector - Fatal编程技术网

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,你总是可以找到一些帖子来投票,这并不难。