【发布时间】:2019-10-25 23:16:42
【问题描述】:
代码是关于找到第一个 x 素数的总和,我使用的是埃拉托色尼筛法。我还没有看到任何代码教程,我只是研究了这个概念并尝试自己实现。 我需要从向量中删除元素,我可以使用擦除。但这就是我面临的问题。
我搜索了一个函数来查找向量中特定元素的索引,它来自算法库。它似乎没有工作,所以我写了一个类似的函数。但是它的返回值似乎不适用于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;
}
当 find 函数返回一个索引时,它应该根据该索引工作并发送一个索引,而擦除函数将使用该索引并从索引中删除元素。但它似乎没有工作。我得到 “没有匹配函数调用‘std::vector::erase(int&)’”。
【问题讨论】:
-
如果您收到该函数不存在的错误,您应该check the reference 以确保您正确调用它。
-
你确定
find返回一个int吗? -
使用
std::find():) 如果你需要一个位置,你可以使用std::distance() -
一个
int不是一个std::vector::const_iterator(并且不能隐式转换为一个)。 -
在 cmets 中,您抱怨答案对您不起作用。我建议您包含一个完整的代码示例(包含和使用命名空间指令/声明)。如果没有您的代码,基本上不可能理解您的具体示例中出了什么问题。