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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.66
krides
Сообщений: n/a
05.06.2010, 17:24     Удаление элементов вектора с использованием итератора в STL #1
Задача: создать программу, в которую пользователь может ввести свой список из 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, удаление элементов в list C++
C++ итератора для собственного вектора
Удаление элементов из вектора C++
C++ Удаление елемента списка с использованием итератора. STL
STL. Функция, которая будет искать элементы большее среднего арифметического вектора и удалять их из вектора C++
C++ Удаление комментариев из текста программы с использованием STL, ошибка при выполнении
C++ Удаление элементов из вектора

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
05.06.2010, 20:51     Удаление элементов вектора с использованием итератора в STL #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>
krides
Сообщений: n/a
05.06.2010, 22:07     Удаление элементов вектора с использованием итератора в STL #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, но когда начал писать код, алгоритмы совершенно из головы вылетели. Так код выглядит явно красивее :-)
Yandex
Объявления
05.06.2010, 22:07     Удаление элементов вектора с использованием итератора в STL
Ответ Создать тему
Опции темы

Текущее время: 23:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru