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;
}
}
}