Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.66
krides
Сообщений: n/a
#1

Удаление элементов вектора с использованием итератора в STL - C++

05.06.2010, 17:24. Просмотров 4064. Ответов 2
Метки нет (Все метки)

Задача: создать программу, в которую пользователь может ввести свой список из 50 названий игр, а потом при желании удалить выбранную игру. Программа обязательно должна быть написана с использованием векторов и итераторов, использование контейнера list не допускается.

Я читал, что удаление элемента из середины вектора смещает все остальные элементы на один и обнуляет присвоенные вектору итераторы, но совсем не ожидал, что мой способ решения задачи заставит программу крэшить. Если кто-нибудь расскажет, что не так с моим кодом и/или предложит свой вариант решения задачи, буду очень благодарен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   vector<string> games;
    vector<string>::iterator myIterator;
    vector<string>::const_iterator iter;
    vector<string>::iterator deleteIter;
    char aGame[100];
    string deleteString;
 
cout << "\nIf you want to delete a game from the list, type in 'delete'." << endl;
       cout << "To add a new one type in it's name: ";
       cin.getline(aGame, 50);
       deleteString = aGame;
       if (deleteString == "delete")
       {
                 cout << "Delete the game called: ";
                 cin.getline(deleteGame, 50);
                 deleteIter = games.begin();
                 for (deleteIter = games.begin(); deleteIter != games.end(); ++deleteIter);
                     if (*deleteIter == deleteString)
                        games.erase(deleteIter);
       }
       else
       {
       games.insert(games.end(), aGame);
       }
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2010, 17:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление элементов вектора с использованием итератора в STL (C++):

Удаление елемента списка с использованием итератора. STL - C++
Надо удалить из списка елементы, значение которых входит в некий диапазон. Я хочу использовать для етого итератор(если такое вообще...

Вставка в вектор элементов с использованием итератора - C++
Задание: Напишите программу, сохраняющую в векторе числа, полученные из стандартного ввода (окончанием ввода является число 0). Удалите...

Удаление комментариев из текста программы с использованием STL, ошибка при выполнении - C++
Здравствуйте решал задачу с использованием STL из книги Страуструпа 6.22 возникла проблема программа вылетает, помогите пожалуйста...

Удаление первого положительного с использованием вектора - C++
В заданном линейном массиве удалить только первый положительный элемент. Такой элемент в массиве обязательно существует. Найти сумму...

stl, удаление элементов в list - C++
Всем доброго времени суток! прошу помочь в решении задачи: Из числовой последовательности найти удалить все элементы, лежащие в...

Алгоритмы STL Удаление элементов в векторе - C++
Банальный вопрос. vector&lt;int&gt; В нем разные числа могут повторяться. Хочу удалить заданное значение, полностью исключить его из вектора. ...

2
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
05.06.2010, 20:51 #2
Уж если пользуешься STL, так пользуйся:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
vector<string> games;
string input;
cout << "\nIf you want to delete a game from the list, type in 'delete'." << endl;
cout << "To add a new one type in its name: ";
getline(cin, input);
if (input == "delete")
{
    cout << "Delete the game called: ";
    getline(cin, input);
    games.erase(find(games.begin(), games.end(), input));
   } else
        games.push_back(input);
}
Добавлено через 3 минуты
конечно, для использования find надо не забыть подключить <algorithm>
0
krides
Сообщений: n/a
05.06.2010, 22:07 #3
Цитата Сообщение от Nick Alte Посмотреть сообщение
Уж если пользуешься STL, так пользуйся:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
vector<string> games;
string input;
cout << "\nIf you want to delete a game from the list, type in 'delete'." << endl;
cout << "To add a new one type in its name: ";
getline(cin, input);
if (input == "delete")
{
    cout << "Delete the game called: ";
    getline(cin, input);
    games.erase(find(games.begin(), games.end(), input));
   } else
        games.push_back(input);
}
Добавлено через 3 минуты
конечно, для использования find надо не забыть подключить <algorithm>
Блин, спасибо огромное! Я тоже вначале думал использовать find, но когда начал писать код, алгоритмы совершенно из головы вылетели. Так код выглядит явно красивее :-)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2010, 22:07
Привет! Вот еще темы с ответами:

STL. Функция, которая будет искать элементы большее среднего арифметического вектора и удалять их из вектора - C++
у меня есть вектор, помогите пожалуйста дописать функцию, которая будет искать элементы большее среднего арифметического вектора и удалять...

итератора для собственного вектора - C++
помогите пожалуйста сделать итератор для вектора template &lt;class T&gt; class myvector { private: int top;//сколько элементов в...

Класс итератора для класса вектора - C++
Необходимо реализовать собственный класс итератора для прохода по вектору, с перегрузкой оператора ++ - переход к следующему элементу и --...

Удаление элементов из вектора - C++
Что я делаю не так string f=&quot;/.+(STL).$1/&quot;; vector&lt;string&gt; words; words.push_back(f); vector&lt; string &gt;::iterator first =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru