该代码是关于查找前 x 个素数的总和,我使用的是埃拉托色尼筛法算法。我还没有看到任何代码教程,我只是研究了这个概念并尝试自己实现。 我需要从 vector 中删除元素,为此我可以使用删除。但这就是我面临的问题。
我搜索函数以查找 vector 中特定元素的索引,它来自算法库。它似乎没有用,所以我写了一个类似的功能。但是它的返回值似乎不适用于vector的删除功能。
//这是主函数
int f=find(v,t2);
if(f!=-1)
v.erase(f);
k++;
t2=t*k;
//这是find
返回索引的函数
//这里vi
是typedef 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;
}
关于c++ - 在 C++ "No Matching Function"中对 vector 使用删除函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56545293/