Во-первых, как упомянул Тим, параметр patterns
является константной ссылкой, поэтому компилятор не позволит вам изменить его - измените его, если хотите иметь возможность удалять элементы в нем.
Имейте в виду, что iter
'указывает на указатель (точнее, char const*
). Таким образом, вы разыменовываете итератор, чтобы получить указатель на строку:
size_t lenPattern = strlen(*iter);
if ( 2 > lenPattern )
iter = patterns.erase(iter);
Кроме того, в последней строке фрагмента присваивается iter
независимо от того, что erase()
возвращает, чтобы сохранить его действительным итератором.
Обратите внимание, что удаление элемента, на который указывает iter
, не освободит строку, на которую указывает указатель в векторе. Неясно, может ли это быть необходимо, поскольку вектор может не «владеть» указанными строками.