Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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++_Pointers_Vector_Graph_Iterator - Fatal编程技术网

C++ 提供错误值的向量迭代器

C++ 提供错误值的向量迭代器,c++,pointers,vector,graph,iterator,C++,Pointers,Vector,Graph,Iterator,我的图形实现面临问题,特别是函数printGraph()。此函数包含一个循环,用于打印图形的邻接列表表示形式。如果我使用成员对象变量adj循环,则它会显示正确的输出,即: 0 : 1 2 2 1 : 0 2 2 : 0 1 0 3 3 : 2 3 3 0 : 0 0 2 1 : 0 0 2 : 0 0 0 3 3 : 0 0 3 但是,如果我使用getter方法adjL(),那么它会提供错误的输出,即: 0 : 1 2 2 1 : 0 2 2 : 0 1 0 3 3 :

我的图形实现面临问题,特别是函数
printGraph()
。此函数包含一个循环,用于打印图形的邻接列表表示形式。如果我使用成员对象变量
adj
循环,则它会显示正确的输出,即:

0 : 1 2 2 
1 : 0 2 
2 : 0 1 0 3 
3 : 2 3 3 
0 : 0 0 2 
1 : 0 0 
2 : 0 0 0 3 
3 : 0 0 3 
但是,如果我使用getter方法
adjL()
,那么它会提供错误的输出,即:

0 : 1 2 2 
1 : 0 2 
2 : 0 1 0 3 
3 : 2 3 3 
0 : 0 0 2 
1 : 0 0 
2 : 0 0 0 3 
3 : 0 0 3 
很可能我犯了一个愚蠢的错误,但我似乎没能抓住它。感谢您的帮助。我想我无法理解如何使用getter方法
adjL()
返回的值

类无向图{
//向量调整;
公众:
向量调整;
无向图(int vCount);/*构造函数*/
void addEdge(int v,int w);/*在图形中添加一条边*/
向量adjL(const int v)const;/*返回与顶点@v相邻的顶点向量*/
void printGraph();
};
无向图::无向图(int vCount):adj(vCount){
}
void无向图::addEdge(int v,int w){
形容词[v]。推回(w);
形容词[w]。推回(v);
edgeCount++;
}
向量无向图::adjL(const int v)const{
返回adj[v];
//返回*(调整开始()+v);
}
void UndirectedGraph::printGraph(){
整数计数=0;
对于(向量::迭代器iter=adj.begin();iter!=adj.end();++iter){

cout由于
adjL
奇怪地按值返回,因此以下行被打断:

for(vector<int>::iterator it = adjL(count).begin(); it != adjL(count).end(); ++it) {
for(vector::iterator it=adjL(count).begin();it!=adjL(count).end();++it){
您正在比较来自两个不同容器的迭代器,您正在将迭代器存储为立即超出范围的临时迭代器,它的值立即变得不可能读取,而不会导致海森堡可能在坟墓中倒下


adjL
应该返回一个
常量向量&

值得注意的是,如果您在VS2013中构建并运行它,它断言“
表达式:向量迭代器不兼容
”,这会告诉您发生了什么。