Проблема в том, что вы удаляете элементы из вектора и увеличиваете свой индекс q
в той же итерации.Итак, во 2-й итерации цикла for вы удаляете "eedf"
из вектора, тогда ваш вектор равен ["dedf", "fedf", "hedf"]
и q = 1
.Но затем, когда вы возвращаетесь к началу цикла for, q
увеличивается до 2, поэтому вы смотрите на "hedf"
далее, пропуская "fedf"
.Чтобы это исправить, вы можете уменьшить q
, когда удаляете элемент из массива, например:
for(int q=0; q<consistentWords.size(); q++)
{
string theCurrentWord = consistentWords[q];
if(theCurrentWord[0] != 'd')
{
consistentWords.erase(consistentWords.begin()+q);
--q;
}
}
Или вы можете использовать итераторы:
vector<string>::iterator it = consistentWords.begin()
while(it != consistentWord.end())
{
string theCurrentWord = consistentWords[q];
if(theCurrentWord[0] != 'd')
{
it = consistentWords.erase(it);
}
else
{
++it;
}
}
Обратите внимание, что erase
возвращаетитератор элемента после того, который вы стерли.Вы должны переназначить it
, потому что он становится недействительным при изменении размера вектора.