You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打印指针vector实现的图结构并解决相关C++编译报错问题

报错原因

你定义的graph是vector<DirectedGraphNode*>类型,容器内存储的元素是指向DirectedGraphNode的指针,对应的迭代器iter_pt的operator->返回值就是DirectedGraphNode*类型,而非结构体本身。
你直接写iter_pt->label相当于要访问DirectedGraphNode*指针的label成员,而指针本身没有该成员,因此触发编译错误。访问iter_pt->neighbors、iter_neighbor_pt->label的报错逻辑完全一致,都是少了一层对指针的解引用。

正确实现方式

基于原有迭代器写法的修正

只需要对迭代器解引用得到指针后,再用->访问结构体成员即可,修正后的打印代码如下:

/*********** start print ************/
//print vertex node
vector<DirectedGraphNode*>::iterator iter_pt;
for (iter_pt=graph.begin(); iter_pt<graph.end(); iter_pt++) {
  // 先解迭代器得到Node*,再用->访问结构体成员
  cout << (*iter_pt) -> label << ": ";
  
  //print the neighbor nodes of each vertex
  vector<DirectedGraphNode*>::iterator iter_neighbor_pt;
  // 同样先解迭代器得到Node*,再取neighbors成员
  for (iter_neighbor_pt = ((*iter_pt) -> neighbors).begin(); 
       iter_neighbor_pt < ((*iter_pt) -> neighbors).end(); 
       iter_neighbor_pt++) {
       // 内层迭代器同理,多一层解引用
       cout << (*iter_neighbor_pt) -> label;
  }
  cout << "\n";
}

C++11 更简洁的范围for写法

可以避免迭代器解引用的易错问题,代码可读性更高:

/*********** start print ************/
for (auto node : graph) {
    cout << node->label << ": ";
    for (auto neighbor : node->neighbors) {
        cout << neighbor->label;
    }
    cout << "\n";
}

两种写法都可以得到你期望的输出:

1: 2
2:

内容的提问来源于stack exchange,提问作者zurich_ruby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:57:00