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

Удаление из вектора - C++

Восстановить пароль Регистрация
 
xam max
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 199
22.01.2012, 18:48     Удаление из вектора #1
1)В программе используется вектор которых хранит объекты некоторого класса, можно ли удалить из его середины(любого произвольного места) ячейку с объектом без использования итераторов ?
2)Если пункт 1 невозможен, то объясните пожалуйста как объявить этот самый итератор?
3)Каким образом происходит удаление из вектора при вызове метода erase?( т.е "сжимается ли вектор" или же просто ячейка зануляется?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2012, 18:48     Удаление из вектора
Посмотрите здесь:

Удаление указателей из вектора C++
C++ Удаление елементов вектора
удаление элементов вектора C++
C++ Удаление пробела из вектора
C++ удаление из двумерного вектора
Удаление элемента из вектора C++
C++ Удаление элемента из вектора
C++ Удаление элемента вектора

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.01.2012, 19:23     Удаление из вектора #2
Цитата Сообщение от xam max Посмотреть сообщение
1)В программе используется вектор которых хранит объекты некоторого класса, можно ли удалить из его середины(любого произвольного места) ячейку с объектом без использования итераторов ?
2)Если пункт 1 невозможен, то объясните пожалуйста как объявить этот самый итератор?
C++
1
2
3
4
v.erase(v.begin() + 5);//На самом деле это и есть итератор. Так что совсем "без итератора" не получится
//or with iterator
std::vector<T>::iterator it = v.begin() + 5;//or some other
v.erase(it);
Добавлено через 26 минут
C++
1
2
3
4
5
6
7
8
erase(iterator __position)
{
    if (__position + 1 != end())
        _GLIBCXX_MOVE3(__position + 1, end(), __position);
    --this->_M_impl._M_finish;
    _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
    return __position;
}
Как видим, все элементы сдвигаются, и освобождается память из под последнего элемента. Скорее всего.
Yandex
Объявления
22.01.2012, 19:23     Удаление из вектора
Ответ Создать тему
Опции темы

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