【发布时间】:2011-11-12 03:00:23
【问题描述】:
假设我有:
class Intersection {
public:
int street;
int avenue;
double x;
double y;
double green[2]; // Light green times for STREET & AVENUE
list <class Road_Segment *> adj;
double best_time;
class Road_Segment *backedge;
multimap <double, Intersection *>::iterator bfsq_ptr;
};
在我的主要功能中,我有一个二维向量:
vector<vector<Intersection *> > vvin ;
vector<vector<Intersection *> >::iterator vvit ;
我是这样访问它的:
for (lit = City_Map::all.begin() ; lit != City_Map::all.end() ; lit++ ) {
inter = *lit ;
s = inter->street ;
a = inter->avenue ;
vvin[s][a] = inter ;
}
其中 lit 是一个包含所有类的列表迭代器。我在通过整数索引访问 2d 向量时遇到了困难,我知道我过去曾做过一些事情。该程序在该确切行上出现段错误。任何想法为什么?
还有,甚至
cout << vvin[i][j] << endl ; // or for that matter[0][0] or [1][1] or whatever
segfaults,所以我知道这不是指针分配。
如果我无法通过整数索引访问它,有没有办法以相同的方式使用迭代器,以便我可以像访问二维数组一样访问它?
请,谢谢。
【问题讨论】:
-
您的向量可能是空的,因此您访问的数据越界。
-
不,做了 vvin.resize(100) 并且仍然有段错误。必须使用 .push_back(inter)。不是我想要的。
-
你调整了两个维度的大小吗?
标签: c++ algorithm vector iterator segmentation-fault