如何将我的类对象插入到我的非 STL 列表中?

Posted

技术标签:

【中文标题】如何将我的类对象插入到我的非 STL 列表中?【英文标题】:How can I insert my class objects into my non-STL List? 【发布时间】:2010-11-13 23:26:04 【问题描述】:

我已经从事这项任务有一段时间了,并且非常坚持插入我的非 STL 列表。该代码将成功编译,但每次插入我的列表时都会出现段错误。下面是一些相关的代码。

tripper.h:

class adjNode

  public:
    int vertex;
    int weight;
    adjNode(int v, int w) : vertex(v), weight(w)  
    adjNode()  
;

tripper.cpp:

Tripper::Tripper(Road *roads, int numRoads, int size)

  List <adjNode> adjList[numRoads];

  for (int i=0; i<numRoads; i++) //Doesn't work with either line
  
    adjList[roads[i].city1].push_back(adjNode(roads[i].city2, roads[i].distance));
    //adjList[0].push_back(adjNode(2, 15)); //Really it's nothing but 3 integers involved
  
  for (int i=0; i<9; i++)
  
    for (List<adjNode>::iterator itr = adjList[i].begin(); itr != adjList[i].end(); itr++)
    
      cout << "There is an edge going from " << i << " to " << (*itr).vertex;
      cout << " with a weight of " << (*itr).weight << endl;
    
  
 // Tripper()

list.h:

void push_back( const Object & x )
 
  insert( end( ), x ); 

iterator insert( iterator itr, const Object & x )

    Node *p = itr.current;
    theSize++;
    return iterator( p->prev = p->prev->next = new Node( x, p->prev, p ) );

节点

 struct Node  
   Object data; 
   Node *prev; 
   Node *next; 
   Node( const Object & d = Object( ), Node * p = NULL, Node * n = NULL ) 
        : data( d ), prev( p ), next( n ) 
   
    
 ;

【问题讨论】:

您遇到了段错误,我在该代码中没有看到内存分配的证据。我猜是有联系的。 在第一个 for 循环中添加 'assert (roads[i].city1 【参考方案1】:

return iterator(p->prev = p->prev->next = new Node(x, p->prev, p));

如果 p->prev 为 NULL,此行将崩溃。

【讨论】:

【参考方案2】:

使用笔和纸为您的指针操作绘制箭头。

将不同行上的操作分开,以便能够更轻松地表达您的意图并调试代码。

【讨论】:

唯一真正的问题是行:“adjList[0].push_back(adjNode(2, 15));”我知道它成功创建了 adjNode,因为我可以在 cout 语句中引用数据。在创建我的列表时,我或多或少感到困惑(或遗漏了一些东西)(我可以在它之后使用 [numRoads] 吗?),正如其他用户所提到的,我不认为我正在分配内存。 Node 构造函数是什么样的?如果它不能以某种方式复制x,那么一旦adjNode 超出范围,您就会崩溃。 结构节点 对象数据;节点 *prev;节点 *next; Node(const Object & d = Object(), Node * p = NULL, Node * n = NULL) : data(d), prev(p), next(n) ; @Brian 初始化列表的头部是什么?如果 Node.prev 默认为 null,并且您没有对列表的头部进行任何其他操作,则第一次插入 p->prev 时将为 null,并且当您设置 p->prev->next @Pete:看起来好像它没有初始化为任何东西。我将如何正确地声明我想要一个包含我可以引用的 adjList 对象的列表?我这样做是希望我可以将此邻接列表用于我的 Dijkstra 算法。

以上是关于如何将我的类对象插入到我的非 STL 列表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将log4j Logger对象实例化到我的类中?

如何使用节点 js 将我的 json 发送到我的视图

我可以在属性中指定路径以将我的类中的属性映射到我的 JSON 中的子属性吗?

如何将我的 .tar.gz 文件转换为 shutil.copyfileobj 的类文件对象?

如何将我的类对象转换为 JSON for Alamofire

为啥 STL 优先级队列错误地对我的类对象进行排序