【发布时间】:2013-11-22 22:10:03
【问题描述】:
我正在开发一个航空公司预订系统,用户可以在该系统中选择他们希望如何对列表进行排序和显示。本质上,我创建了一个对象列表,其中对象成员是几个城市的名称和代码。但是,我不确定如何按对象成员对该列表进行排序,然后显示该列表的成员。这是我创建和填充列表的地方。
城市类定义:
#ifndef CITY_H
#define CITY_H
#include <iostream>
#include <list>
using namespace std;
class City
{
protected:
string name;
string code;
public:
City()
{
name = "";
code = "";
}
void setName(string);
void setCode(string);
void addCities();
void displayCities(const list<City> &);
string getName();
string getCode();
friend ostream& operator<< (ostream& , City &);
};
ostream& operator<< (ostream& , City &);
#endif //CITY_H
void City::addCities()
{
ifstream cities;
cities.open("cities.dat");
list<City> cityList;
string co = "", na = "";
while (!cities.eof())
{
City c;
cities >> co;
cities >> na;
c.setCode(co);
c.setName(na);
cityList.push_back(c);
}
displayCities(cityList);
}
这是包含我正在加载到列表中的信息的文本文件:
ATL Atlanta
ORL Orlando
DFW Dallas/Fort_Worth
NYC New York City
HAW Hawaii
CHI Chicago
LAX Los_Angeles
这是我显示列表的尝试:
void displayCities(const list<City> &cityRef)
{
list<City>::iterator it;
for (it == cityRef.begin(); it != cityRef.end(); ++it)
{
std::cout << (*it) << std::endl;
}
}
ostream& operator <<(ostream& s, City& c)
{
s << c.name << c.code;
return s;
}
【问题讨论】:
-
我想
City不是 POD(你应该在问题中包含它的定义)所以你只是打印迭代器指向的任何内容,而不是每个元素的全部内容列表。此外,您的标题不准确,因为我没有看到任何排序尝试(也没有请求)。您还应该指定要显示的内容。 -
for (it == cityRef.begin();应该是for (it = cityRef.begin();和list<City>::iterator应该是list<City>::const_iterator。除此之外,显示代码看起来还可以。 (我假设你已经为你的City类定义了operator <<)。 -
您的代码将读取最后一行的垃圾代码,因为它只会在读取任何内容之前检查
ifstream的状态,请参阅stackoverflow.com/questions/4258887/… 和此处的许多其他问题。
标签: c++ list sorting object printing