【问题标题】:List iterator find function error in c++C ++中的列表迭代器查找函数错误
【发布时间】:2012-11-14 03:02:58
【问题描述】:

我的 c++ 程序中有一个编译错误:“no matching function for call to find(std::_List_iterator<Process>, std::_List_iterator<Process>, Process&)”。

mfqueue 类看起来像:

MFQueue::MFQueue() {
        list<Process> queue;
        vector<int> ran;
        int time_quantum = 0;
        int run_for = 0;
}

MFQueue::MFQueue(int quantum) {
        list<Process> queue;
        vector<int> ran;
        int time_quantum = quantum;
        int run_for = 0;
}

“过程”是我的课程之一

bool MFQueue::contains(Process p) {
        list<Process>::iterator itr = find(queue.begin(), queue.end(), p);
        return (p == *itr);;
}

有谁知道如何解决这个问题?提前致谢!

【问题讨论】:

  • #include &lt;algorithm&gt; ... return std::find(queue.begin(), queue.end(), p) != queue.end();
  • return (p == *itr); 如果找不到对象,则会给出未定义的行为;不允许取消引用过去的迭代器。你想要return itr != queue.end();
  • 你最好希望你也不需要使用队列。只要您#include &lt;queue&gt;,您的代码就会中断。

标签: c++ list iterator


【解决方案1】:

#include &lt;algorithm&gt; 添加到您的 CPP 文件中。

【讨论】:

  • 别忘了修复您已经指出的其他逻辑错误:在构造函数中重新声明 queue 并错误地检查失败的查找。
【解决方案2】:

你需要为std::find算法重载operator==,假设你想比较进程的id 说:

 bool operator==(const Process &lhs, const Process& rhs)
 {
   return lhs.id== rhs.id;
 }

现在,你可以让它工作了

#include <algorithm>
std::list<Process>::iterator itr = std::find(queue.begin(), queue.end(), p);

【讨论】:

  • 谢谢,它有效。问题是我没有包含
【解决方案3】:

你为什么在不使用它们的构造函数中声明list&lt;Process&gt; queue;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多