gpt4 book ai didi

c++ - std::list 永远循环,范围问题?

转载 作者:行者123 更新时间:2023-11-28 06:52:53 34 4
gpt4 key购买 nike

我有一个节点类。它包含 x,y 坐标、一个 id 和一个包含相邻节点的节点指针列表。

我对类中的列表数据结构有疑问。 printAdj()函数工作正常,但我需要通过获取 adjList 从类外部迭代节点的邻接列表成员(member)使用adjs()功能。

class Node{
public:
// constructors & destructors
Node(double x, double y, unsigned id) : x_(x), y_(y),
id_(id) {}

// setters & getters
std::list<Node*> adjs() const { return adjList; }


// member functions
void addAdj(Node* n) { adjList.push_back(n); }

void printAdj() const{
for(std::list<Node*>::const_iterator it = adjList.begin();
it != adjList.end() ; ++it){
std::cout << "\t" << (*it)->id() << " " << std::endl;
}
}


private:
std::list<Node*> adjList;
double x_, y_;
unsigned id_;
};

外部循环永远运行。

list<Node*> RRT_graph;  //global

void print(){
for(list<Node*>::const_iterator it = RRT_graph.begin() ;
it != RRT_graph.end() ; ++it){

cout << "Node ID: " << (*it)->id() << "\tX: " << (*it)->x()
<< "\tY: " << (*it)->y() << endl;

cout << "\tAdjacency List:" << endl;
(*it)->printAdj(); // member function correctly prints adjacency list

// nothing wrong with the size, it displays correctly
cout << "-----------------------------------" << endl;
cout << "(" << (*it)->adjs().size() << ")" << endl;

// but when the list is looped, it goes forever.
unsigned count = 0;
for(list<Node*>::const_iterator ite = (*it)->adjs().begin() ;
ite != (*it)->adjs().end() ; ++ite)
cout << count++ << endl;


}

由于两个邻接表打印循环是相同的并且只有成员函数有效,我怀疑这里存在范围问题,但我有点迷路了。

这里有什么问题吗?

最佳答案

只需在 adjs() 中返回 const 引用,它应该可以工作。目前它正在返回一个拷贝,因此当您在 (*i​​t)->adjs().begin()(*i​​t)->adjs().end( ),它为不同的拷贝提供迭代器

    const std::list<Node*>& adjs() const   { return adjList;   }

关于c++ - std::list 永远循环,范围问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584538/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com