#c #vector
#c #вектор #c
Вопрос:
У меня есть вектор, words_in_family
, типа: vector<vector<string>>
. Я пытаюсь удалить каждый элемент, words_in_family
который не равен вектору строк largest_family
, но у меня возникают проблемы, и я не уверен, почему. Любая помощь приветствуется.
for (int i = words_in_family.size() - 1; i >= 0; i--)
{
if (words_in_family[i] != largest_family)
{
words_in_family.erase(words_in_family[i]);
}
}
Комментарии:
1. Какая у вас проблема?
2. ‘вектор<строка, vector<строка>>’ … объявление вектора неверно.. вы должны получить ошибку компиляции. Можете ли вы указать, как вы объявили вектор
3. @SauravSahu У меня ошибка под
.erase.
, в которой упоминается что-то о перегруженной функции, и код выполняется, но удаление векторных элементов не происходит.4. @SabyasachiBehera Извините, это была ошибка. Должно быть исправлено сейчас.
5. Я опубликую это в качестве комментария, потому что вы должны быть в состоянии сделать это так, как хотите, поэтому я предполагаю, что в какой-то момент вы получите ответ на этот вопрос, но не эффективнее ли просто создать новый одновекторный элемент и поменять его местами с тем, который у вас есть, или очистить вектор и затем нажать
largest_family
?
Ответ №1:
erase
метод не принимает значения. Вместо этого используйте итератор в качестве параметра для erase
метода:
vector<vector<string>>::iterator it = words_in_family.begin();
for (int i = words_in_family.size() - 1; i >= 0; i--)
{
if (words_in_family[i] != largest_family)
{
words_in_family.erase(it i);
}
}
удаление итератора (позиция итератора);
удаление итератора (первый итератор, последний итератор);
Обратите внимание, что итераторы для std::vector являются итераторами произвольного доступа, поэтому вы можете добавлять / вычитать целые значения, чтобы получить другие допустимые итераторы.
Ответ №2:
C std::vector
сотрите элемент, в вашем случае:
Удалить элемент из вектора ( words_in_family
), значение которого равно largest_family
:
std::vector<std::vector<std::string>>::iterator Itr;
for(Itr = Words_in_family.begin(); Itr != Words_in_family.end();)
{
if(*Itr == largest_family)
{
Itr = Words_in_family.erase(Itr);
}
else
{
Itr ;
}
}
Ответ №3:
words_in_family.erase(words_in_family.begin() i, words_in_family.begin() i 1);
erase принимает итератор в качестве аргумента