Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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+中的列表+;_C++_List_Vector_Stl - Fatal编程技术网

C++ 迭代向量c+中的列表+;

C++ 迭代向量c+中的列表+;,c++,list,vector,stl,C++,List,Vector,Stl,我有以下代码: #include <iostream> #include <vector> #include <list> using namespace std; class Graph { public: //Create graph with n nodes Graph(int size); ~Graph(); //Initialize graph v

我有以下代码:

#include <iostream>
#include <vector>
#include <list>

using namespace std;

class Graph {
    public:
        //Create graph with n nodes
        Graph(int size);
             ~Graph();

        //Initialize graph
        void InitializeGraphWithRandomNum();


    private:

        vector <list <int*> > *graph;

};


void Graph::InitializeGraphWithRandomNum() {
    //Here I want to iterate
    for (int i=0; i< graph->size(); i++) {
        std::list <int*>::iterator it;
        for (it = graph[i].begin(); it< graph[i].end();++it) {
                 ..........
            }

    }
}
#包括
#包括
#包括
使用名称空间std;
类图{
公众:
//创建具有n个节点的图
图形(整数大小);
~Graph();
//初始化图形
void InitializeGraphWithRandomNum();
私人:
向量*图;
};
void图::InitializeGraphWithRandomNum()的缩写{
//这里我想重复一下
对于(inti=0;isize();i++){
std::list::迭代器;
for(it=graph[i].begin();it
这里有点不对劲。上面说

它((图*)this)->图::图+((无符号整数)((无符号整数)i)*12u))->标准::向量::以Tp=std::列表开始,Alloc=std::分配器>,标准::向量::迭代器=U gnu cxx::U normal_iterator*,标准::向量>>,类型名称std:vector:U基::Tp=Alloc:uType::pointer=std::列表*'dejkstrag.cpp

多谢各位
最佳

图形
是指向向量的指针,而不是向量。要么将其声明为向量,要么使用
(*graph)[i]。begin()

graph
是指向向量的指针,也可以将迭代器与
end()进行比较。
使用
运算符=
而不是
操作符错误指向一个statemenet(您没有显示),您试图在该statemenet中为列表的一个元素赋值。我想你忘了,它有指向int的指针类型。
所以不是

*it = value;
你必须写作

**it = value;
改为

void Graph::InitializeGraphWithRandomNum()
{
    typedef list<int*> int_list;
    typedef vector<int_list> int_list_vector;

    for (int_list_vector::iterator vectit = graph->begin(); vectit != graph->end(); ++vectit)
    {
        for (int_list::iterator listit = vectit->begin(); listit != vectit->end(); ++listit)
        {
            int* value = *listit;
        }
    }
}
如果您是C++11非成员begin/end,那么许多C++-ER(像我一样)都支持:

void Graph::InitializeGraphWithRandomNum()
{
    for (auto vectit = begin(*graph); vectit != end(*graph); ++vectit)
    {
        for (auto listit = begin(*vectit); listit != end(*vectit); ++listit)
        {
            int* value = *listit;
        }
    }
}

对迭代器使用
auto
也可以,而且可能更整洁。他在标记中没有提到C++11,所以我忽略了这一点。将添加alt版本:)基于范围的for循环将使C++11部分更漂亮。
void Graph::InitializeGraphWithRandomNum()
{
    typedef list<int*> int_list;
    typedef vector<int_list> int_list_vector;

    for (int_list_vector::iterator vectit = graph->begin(); vectit != graph->end(); ++vectit)
    {
        for (int_list::iterator listit = vectit->begin(); listit != vectit->end(); ++listit)
        {
            int* value = *listit;
        }
    }
}
void Graph::InitializeGraphWithRandomNum()
{
    for (auto vectit = graph->begin(); vectit != graph->end(); ++vectit)
    {
        for (auto listit = vectit->begin(); listit != vectit->end(); ++listit)
        {
            int* value = *listit;
        }
    }
}
void Graph::InitializeGraphWithRandomNum()
{
    for (auto vectit = begin(*graph); vectit != end(*graph); ++vectit)
    {
        for (auto listit = begin(*vectit); listit != end(*vectit); ++listit)
        {
            int* value = *listit;
        }
    }
}