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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
karl 777
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 63
#1

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

07.08.2013, 10:37. Просмотров 1298. Ответов 5
Метки нет (Все метки)

Как работает 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()?
C++ вектор алгоритм erase
std::vector::erase C++
C++ stl::list erase()
C++ Error C3867 при вызове функции erase и insert для двумерного вектора
Функция Erase класса vector C++
Не правильно работает erase + remove C++
Шаблоны: insert, erase C++
Erase map 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
Сообщений: 63
07.08.2013, 10:52  [ТС]     Реализация функции erase() #3
Как написать vector::erase() своими руками, вот о чем.
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 652
Завершенные тесты: 1
07.08.2013, 10:59     Реализация функции erase() #4
удалили it, и сдвинули все за ним на 1 влево... Если речь о vector'e, конечно.
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.08.2013, 17:24     Реализация функции erase() #5
Цитата Сообщение от karl 777 Посмотреть сообщение
Как написать vector::erase() своими руками, вот о чем.
Лезем в исходники вектора и смотрим. Благо они прикладываются в довесок к любому компилятору.
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()
Ответ Создать тему
Опции темы

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