gpt4 book ai didi

c++ - vector erase expects 2 arguments 错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:55 24 4
gpt4 key购买 nike

我正在使用 Code::Blocks,下面是我的 C++ 代码。

void removeEvenLength(vector<string> &vec)
{
for (vector<string>::reverse_iterator i = vec.rbegin(); i != vec.rend(); ++i)
{
string word = *i;
if (word.length() % 2 == 0)
vec.erase(i);
}
}

此函数采用字符串 vector 并删除偶数个字母长的单词。我得到一个错误,说删除需要 2 个参数,但根据 c++ 文档,一个应该没问题。你知道哪里出了问题吗?

最佳答案

如果您绝对必须将 erase() 与反向迭代器一起使用,方法如下:

void removeEvenLength(vector<string> &vec)
{
for (vector<string>::reverse_iterator i = vec.rbegin(); i != vec.rend();)
{
string word = *i;
if (word.length() % 2 == 0) {
vector<string>::iterator newi = vec.erase(i.base() - 1);
i = vector<string>::reverse_iterator(newi);
} else {
++i;
}
}
}

但出于多种原因,这并不是删除 vector 中所有偶数长度字符串的最佳方法。方法如下(称为“删除-删除”习惯用法):

struct IsEven {
bool operator()(const string &s) const {
return (s.size() % 2) == 0;
}
};

vec.erase(
std::remove_if(vec.begin(), vec.end(), IsEven()),
vec.end()
);

或者在 C++11 中,您可以使用 lambda 代替单独的仿函数:

vec.erase(
std::remove_if(
vec.begin(), vec.end(),
[](const string &s) { return (s.size() % 2) == 0; }
),
vec.end()
);

关于c++ - vector erase expects 2 arguments 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20735035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com