| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > std::vector<>::erase? |
| Автор: Astoret 2.7.2009, 11:31 | ||
| Никак немогу найти как ведет себя метод erase в vector Он удаляет элемент массива и уменьшает сам массив на один или просто стирает с этого места данные? И не совсем понял как он работает, гугл дал что передать итератор указывающий на удаляемый элемент, а что за интератор я так и не понял, если не трудно скажите как реализовать удаление элемента:
|
| Автор: azesmcar 2.7.2009, 11:37 |
| http://www.cplusplus.com/reference/stl/vector/erase/\ перевод нужен? Добавлено через 2 минуты и 50 секунд он принимает итератор. Лучше использовать find, он вернет итератор на найденный элемент (или end() если не найдет). хотя вектор работает с random access iterator, так что Data.begin() + i тоже пойдет, но это некрасиво. |
| Автор: andrew_121 2.7.2009, 11:45 | ||
А по ручкам, линеечкой! |
| Автор: azesmcar 2.7.2009, 11:48 |
чем тебе + на random access iterator-е не по душе? |
| Автор: mes 2.7.2009, 11:56 |
наверно потому, что не было указано, что результативное значение итератора должно быть в диапозоне [begin(), end()] |
| Автор: andrew_121 2.7.2009, 12:52 |
Не хорошо смешивать. |
| Автор: Astoret 2.7.2009, 13:40 | ||
Спасибо за ссылочку |
| Автор: Cheloveck 2.7.2009, 13:46 |
| Стандарт гарантирует, что все элементы std::vector находятся последовательно друг за другом, тоесть точно так же, как и в массиве. Следовательно, метод erase, удаляя элемент, смещает все последующие на один элемент назад. Итераторы - это как указатели, тока навороченные))) Тут лучше доки читать. |
| Автор: bsa 2.7.2009, 14:34 | ||
Astoret, правильно так:
|
| Автор: andrew_121 2.7.2009, 16:59 | ||
А для этого нужно стандарт читать? Название контейнера не о чем не говорит? Векторов, которые бы работали по другому, не встречал) |
| Автор: Cheloveck 2.7.2009, 19:21 |
| andrew_121, тем не менее он гарантирует)) |