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

Реализация функции erase() - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
karl 777
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 58
07.08.2013, 10:37     Реализация функции erase() #1
Как работает erase()?
То есть, если у нас : prev, it, next - итераторы и выполняя erase(it), она очистит память, которую занимала it и при ++prev мы попадем на next? В общем помогите разобраться как можно написать эту функцию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 10:37     Реализация функции erase()
Посмотрите здесь:

C++ vector.erase
.erase() в массиве. C++
list не работает erase C++
C++ vector::erase()?
std::vector::erase C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
07.08.2013, 10:42     Реализация функции erase() #2
О чем ты вообще?
О каком контейнере речь?
У большинства контейнеров модификация инвалидирует итераторы.
karl 777
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 58
07.08.2013, 10:52  [ТС]     Реализация функции erase() #3
Как написать vector::erase() своими руками, вот о чем.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
07.08.2013, 10:59     Реализация функции erase() #4
удалили it, и сдвинули все за ним на 1 влево... Если речь о vector'e, конечно.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.08.2013, 17:24     Реализация функции erase() #5
Цитата Сообщение от karl 777 Посмотреть сообщение
Как написать vector::erase() своими руками, вот о чем.
Лезем в исходники вектора и смотрим. Благо они прикладываются в довесок к любому компилятору.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.08.2013, 22:57     Реализация функции erase() #6
Если для контейнера подобному вектору (с одним концом), то примерно вот так (код из моей реализации):
C++
1
2
3
4
5
6
7
8
void erase(size_type pos, size_type n)
{
    //проверка на выход за границы
    //...
    std::move(first + pos + n, last, first + pos;)
    destroy(last - n, last);
    last -= n;
}
C++
1
2
3
4
5
        void destroy(pointer _first, pointer _last)
        {
            for (; _first != _last; ++_first)
                alloc.destroy(_first);
        }
Добавлено через 47 секунд
освободившееся место идет под резерв (у меня он начинается с last)
Yandex
Объявления
10.08.2013, 22:57     Реализация функции erase()
Ответ Создать тему
Опции темы

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