C++ vector容器最后一个元素的问题

logannn233 2019-05-21 05:09:02
代码如下
class Flight {                //航班类

private:
int Flightnum; //航班号
int Price; //票价
string Companyname; //公司名

public:

int getFlightnum() { return Flightnum; } //取航班号
string getCompanyname() { return Companyname; } //取公司名称
void setFlightnum(int fnum) { Flightnum = fnum; } //设置航班号

void showFlight() //屏幕上打印航班信息
{
//略
}
};


class FlightList { //航班管理

public:
vector<Flight> FlightList1; // 存放所有航班的容器


void changefnum(class Flight & F) //航班号修改 F是要修改的航班
{
cout<<"\n请输入新航班号:";
int newnum;
cin>>newnum;
vector<Flight>::iterator it;
for (it = FlightList1.begin();it!=FlightList1.end();it++)
{
if (it->getFlightnum() == newnum && it->getCompanyname() == F.getCompanyname())
{ //同公司航班号不能重复↑↑↑↑
cout<<"\n此航班号已存在,操作不成功,将返回上级菜单,";
changeFlight(F.getFlightnum()); //上级菜单
break;
}
else
{
F.setFlightnum(newnum);
cout<<"\n 新航班号设置完成,修改后航班信息如下"<<endl;
F.showFlight();
break;
}
}
}

void changeFlight(int num)
{
//略
}


};

在调用航班号修改函数changefnum(),接着对新的航班号进行判断
如果同公司已经有和新航班号相同的号码,就报错返回

在运行测试的时候发现,如果航班号相同的那个航班是容器最后一个元素的话
就会无法成功判断到航班号重复

之前看到vector的end()函数指的不是容器中最后一个元素,而是最后一个的下一个,是因为这样吗??
求解答5555555

例:容器中最后一个航班航班号“MU2251”
对另一航班号修改为 2251
就会得到两个航班“MU2251”
...全文
414 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2019-05-21
  • 打赏
  • 举报
回复
你说对了,end指向的是最后一个的下一个。 因此在for循环结束后需要将缓冲区的数据也进行处理。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧