我将以下 vector 传递给函数
void WuManber::Initialize( const vector<const char *> &patterns,
bool bCaseSensitive, bool bIncludeSpecialCharacters, bool bIncludeExtendedAscii )
我想删除任何长度小于2的元素
我尝试了以下内容,但它甚至没有编译
你能告诉我我在这里想念的东西吗?
for(vector<const char *>::iterator iter = patterns.begin();iter != patterns.end();iter++)
{//my for start
size_t lenPattern = strlen((iter).c_str);
if ( 2 > lenPattern )
patterns.erase(iter);
}//my for end
最佳答案
这是行不通的,因为如果从 vector 中删除某些内容,则会使迭代器无效。
它可能无法编译,因为您以错误的方式使用了迭代器。您可以尝试iter-> c_str或(* iter).c_str。另一方面,给我们错误信息;)
接下来,您尝试修改const vector 。这就是编译器抱怨的原因。
您可以使用索引来执行此操作,如下所示:
for (int i = 0; i < patterns.size(); ++i) {
size_t lenPattern = strlen(patterns[i]);
if (2 > lenPattern) {
patterns.erase(patterns.begin() + i);
--i;
}
}
但是,这不是很优雅,因为我操纵柜台...