gpt4 book ai didi

c++ - vector 迭代器循环不兼容

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:21:31 24 4
gpt4 key购买 nike

我在使用 auto 在我的 vector 中搜索 Employee 的循环时遇到问题,由于某种原因我的 vector 迭代器无法兼容,这里是函数:

Employee * searchEmp(int id,Company * comp)
{
for(auto i = comp->getEmployees().begin(); i < comp->getEmployees().end(); ++i)
if((*i)->getID()==id)
return (*i);
return NULL;
}

它总是因++i 部分的错误而崩溃。

一些注意事项:

  1. 每个员工都有一个 ID。

  2. 确定列表中有 1 项(getEmployees)。

  3. 循环应该遍历所有 vector 并找到 ID 与我要查找的 ID 相同的员工。

公司标题:

#include "Manager.h"

class Company
{
public:
Company();
Company(string name,string adress,Manager * ceo);
void companyInfo();
Manager * ceo;
vector<Employee *> getEmployees();
void addEmployee(Employee * worker);
private:
string name;
string adress;
vector<Employee *> employees;

};

最佳答案

Company::getEmployees() 按值返回,这意味着对于 comp->getEmployees().begin()comp->getEmployees() .end(),你会得到两个不同的临时 vector 的两个迭代器,它们分别被复制(并且会立即被销毁,剩下两个悬挂的迭代器),迭代器不会完全属于同一个vector

如果按值返回是您的意图,那么您应该使用命名变量,例如

Employee * searchEmp(int id,Company * comp)
{
auto v = comp->getEmployees();
for(auto i = v.begin(); i < v.end(); ++i)
if((*i)->getID()==id)
return (*i);
return NULL;
}

或者如果可能的话让getEmployees通过引用返回,例如

class Company 
{
public:
...
vector<Employee *>& getEmployees();
...
};

关于c++ - vector 迭代器循环不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46912498/

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