gpt4 book ai didi

c++ - 邻接链表C++展示

转载 作者:行者123 更新时间:2023-11-30 04:18:45 36 4
gpt4 key购买 nike

我创建了一个邻接链表来显示城市之间的航类。该程序从 2 个文件中读取,一个包含城市名称,另一个包含不同航类的来源和目的地。我为所服务的城市创建了一个数组,并为数组的每个城市索引创建了一个连接城市的链接列表。但是,我无法打印列表。我的输出看起来像这样:

Origin --  Dest     ---      Flight No. --       Price  

NYC --- Chicago -- 3123 ---- 123
NYC ---- Miami ---- 2123 ---- 543
NYC ---- Seattle --- 9283 ---- 243

我想知道我是否可以只打印一次出发地城市。

这是我的结构代码和其他内容:

 struct flight
{
int fNumber;
string source;
string dest;
int price;
}

输出重载运算符p.source为起点,p.dest为终点,依此类推

 ostream& operator<<(ostream & os, const flight & p)
{
os <<"From "<< p.source << " to: ";
int diff=0;
diff= 35- p.source.length();
os << fixed<< setw(diff)<<right<< p.dest;
os << setw(10)<<right<<p.fNumber;
os << setw(10)<<right<<p.price;
return os;
}

和显示功能

void flightMap::display()
{
cout<<setw(15)<<"Origin "<<setw(30)<<"Destination"<<setw(12)<<"Flight "<<setw(13) <<"Price "<<endl;
cout<<"================================================================="<<endl;

for (int i=0; i<number; i++)
{
flightRecord[i].display();
}
}

我希望我的输出看起来像这样

Origin Dest Flight No. Price

NYC Chicago 3123 123
---- Miami 2123 543
---- Seattle 9283 243

最佳答案

你可以做到,但它可能需要对你的代码进行一些重组。首先要改的是这个

ostream& operator<<(ostream & os, const flight & p)

这是标准的打印方式,但在这里还不够好,因为无法告诉此函数是否打印源城市。所以让我们写一个不同的函数

void printFlight(ostream & os, const flight & p, bool printSource)
{
if (printSource)
os <<"From "<< p.source << " to: ";
else
os <<"From --- to: ";
...
}

现在您可以在循环中使用该函数,只要您记得最后打印的源城市是什么。如果上一个源城市与当前源城市不同,则打印源城市,否则不打印。像这样

string lastSource = "";
for (int i=0; i<number; i++)
{
printFlight(cout, flightRecord[i], flightRecord[i].source != lastSource);
lastSource = flightRecord[i].source;
}

关于c++ - 邻接链表C++展示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16241774/

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