c++ - 在 C++ "No Matching Function"中对 vector 使用删除函数的问题

标签 c++ vector iterator erase

该代码是关于查找前 x 个素数的总和,我使用的是埃拉托色尼筛法算法。我还没有看到任何代码教程,我只是研究了这个概念并尝试自己实现。 我需要从 vector 中删除元素,为此我可以使用删除。但这就是我面临的问题。

我搜索函数以查找 vector 中特定元素的索引,它来自算法库。它似乎没有用,所以我写了一个类似的功能。但是它的返回值似乎不适用于vector的删除功能。

//这是主函数

int f=find(v,t2);
if(f!=-1)
    v.erase(f);
k++;
t2=t*k;

//这是find返回索引的函数

//这里vitypedef vector<int>

int find (vi v,int val)
{
    int first=0;
    while (v.size()!=first) {
        if (v.at(first)==val) return first;
        ++first;
    }
    return -1;
}

由于查找函数返回一个索引,它应该根据该索引工作并发送一个索引,而删除函数将使用该索引并从索引中删除元素。但它似乎没有用。我越来越 “没有匹配函数来调用‘std::vector::erase(int&)’”。

最佳答案

iterator erase (const_iterator position);

iterator erase (const_iterator first, const_iterator last);

没有采用 int 的删除函数

而且由于这似乎不是家庭作业,因此编写您自己的 find() 毫无意义。使用这个:http://www.cplusplus.com/reference/algorithm/find/

这是它如何工作的一个最小例子

#include <iostream>
#include <vector>
#include <algorithm>

void remove(std::vector<int> &vec, int number) {
    vec.erase(std::find(vec.begin(), vec.end(), number));
}

int main() {
  std::vector<int> vec;
  vec.push_back(11);
  vec.push_back(22);
  vec.push_back(33);

  remove(vec, 22);

  for (int i : vec) std::cout << i << std::endl;
}

Run it

关于c++ - 在 C++ "No Matching Function"中对 vector 使用删除函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56545293/

相关文章:

c++ - 为什么在分配/取消分配一些小对象后内存不可重用?

javascript - 在 javascript 中,从迭代器创建数组

Python - 实现 __iter__ 或返回列表的 __iter__

c# - 我可以为此使用什么数学模型以及如何在 c++/c# 中实现它

c++ - 从同一类中的另一个方法调用方法时出错

c++ - 如何绘制每个分割对象的轮廓

C++ 使用 vector 重载输出

struts2 - 我如何获得最后一个元素迭代器struts2

c++ - 当价格 float 时对订单簿进行排序

c++ - 将变量与多个值进行比较的最有效方法?