如何解决将列表迭代器转换为指针不起作用?
我想实现一个函数,它遍历一个列表并在匹配时返回一个指针。我写道:
std::list<JobEntry> jobs;
JobsList::JobEntry *JobsList::getJobById(int jobId) {
for (auto const& job : jobs) {
if (job.pid==jobId) {
return std::addressof(*job);
}
}
return nullptr;
}
但这不起作用,我该怎么办?
解决方法
getJobById()
被声明为返回指向非常量 JobEntry
对象的指针,但 job
是对 const JobEntry
对象的引用。您不能将指向常量的指针分配给指向非常量的指针。所以去掉 const
。
此外,range-based for
loop 在内部处理迭代器,因此 job
是您要返回指针的实际对象,而不是指向该对象的迭代器,因此不要尝试取消引用它。
JobsList::JobEntry* JobsList::getJobById(int jobId) {
for (auto &job : jobs) {
if (job.pid == jobId) {
return std::addressof(job);
}
}
return nullptr;
}
话虽如此,请考虑使用标准 std::find_if()
算法而不是手动循环:
#include <algorithm>
JobsList::JobEntry* JobsList::getJobById(int jobId) {
auto iter = std::find_if(jobs.begin(),jobs.end(),[=](const JobEntry &job) { return job.pid == jobId; }
);
if (iter != jobs.end())
return std::addressof(*iter);
return nullptr;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。