遍历矢量 c++ 中的列表
Iterate over the lists in vector c++
我有这个代码:
#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) {
..........
}
}
}
这里有些不对劲。它说
在 'it = (((Graph*)this)->Graph::graph + ((unsigned int)(((unsigned int)i) * 12u))))->std::vector<_Tp, _Alloc>::begin with _Tp = std::list, _Alloc = std::allocator>, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator*, std::vector>>, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::p ointer = std::list*' DejkstraAlg.cpp
谢谢最好
graph
是指向向量的指针,而不是向量。要么将其声明为向量,要么使用 (*graph)[i].begin()
.
更改为
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(不包含在你的标签中,但可能对其他人有用):
void Graph::InitializeGraphWithRandomNum()
{
for (auto vectit = graph->begin(); vectit != graph->end(); ++vectit)
{
for (auto listit = vectit->begin(); listit != vectit->end(); ++listit)
{
int* value = *listit;
}
}
}
如果你喜欢C++11非会员开始/结束,那么许多C++人(像我一样)都是以下支持者:
void Graph::InitializeGraphWithRandomNum()
{
for (auto vectit = begin(*graph); vectit != end(*graph); ++vectit)
{
for (auto listit = begin(*vectit); listit != end(*vectit); ++listit)
{
int* value = *listit;
}
}
}
graph
是一个指向向量的指针,也是为了比较迭代器end()
使用 operator!=
而不是 operator<
for (it = (*graph)[i].begin(); it != (*graph)[i].end(); ++it)
// ^^^
最好只写:
vector <list<int>> graph;
错误指向 statemenet(您没有显示),您正在尝试为列表中的元素分配值。我想你忘记了*它有指向int的指针类型。所以而不是
*it = value;
你必须写
**it = value;
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在卡萨布兰卡形成编码参数的列表
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题