没有要调用的匹配函数。 C++ 标准语言
No Matching function to call. C++ STL
我是 C++ STL 的新手。我正在编写一个函数来检查一个向量是否是另一个向量的子集(重复元素也算在内)并打印 'Yes' 或 'No'。我想出了以下代码:
void checkMagazine(vector<string> magazine, vector<string> note) {
vector<string>::iterator a;
for(int i=0;i<note.size();i++)
{
a=find(magazine.begin(),magazine.end(),note[i]);
if(a==magazine.end())
{
printf("No");
return;
}else magazine.erase(a-magazine.begin());
}
printf("Yes");
}
但是,我收到以下编译错误:
error: no matching function for call to ‘std::vector<std::__cxx11::basic_string<char>
>::erase(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*,
std::vector<std::__cxx11::basic_string<char> > >::difference_type)’
}else magazine.erase(a-magazine.begin());
我正在尝试使用擦除删除 magazine.Is 中找到的元素迭代器的声明类型有问题吗?为什么会这样?
而且,如果有其他 methods/logic/inbuilt-functions 可以使用 STL 完成所需的工作,请告诉我,因为我是新手,正在尝试学习它。
erase
采用迭代器。你有那个迭代器,它叫做 a
。但是您随后将迭代器 a
转换为相对于 begin()
的偏移量。 erase
没有需要偏移量的重载。
如果对向量进行排序,标准库有备选方案,但我们没有看到调用代码,因此我们不能假设。
我是 C++ STL 的新手。我正在编写一个函数来检查一个向量是否是另一个向量的子集(重复元素也算在内)并打印 'Yes' 或 'No'。我想出了以下代码:
void checkMagazine(vector<string> magazine, vector<string> note) {
vector<string>::iterator a;
for(int i=0;i<note.size();i++)
{
a=find(magazine.begin(),magazine.end(),note[i]);
if(a==magazine.end())
{
printf("No");
return;
}else magazine.erase(a-magazine.begin());
}
printf("Yes");
}
但是,我收到以下编译错误:
error: no matching function for call to ‘std::vector<std::__cxx11::basic_string<char>
>::erase(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*,
std::vector<std::__cxx11::basic_string<char> > >::difference_type)’
}else magazine.erase(a-magazine.begin());
我正在尝试使用擦除删除 magazine.Is 中找到的元素迭代器的声明类型有问题吗?为什么会这样? 而且,如果有其他 methods/logic/inbuilt-functions 可以使用 STL 完成所需的工作,请告诉我,因为我是新手,正在尝试学习它。
erase
采用迭代器。你有那个迭代器,它叫做 a
。但是您随后将迭代器 a
转换为相对于 begin()
的偏移量。 erase
没有需要偏移量的重载。
如果对向量进行排序,标准库有备选方案,但我们没有看到调用代码,因此我们不能假设。