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

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

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

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

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

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

Ошибка в функции erase для vector - C++
cout << "How much numbers? : "; int n; cin >> n; vector<int>array(n); for (int i = 0; i < n; i++) { cin >> array; ...

Error C3867 при вызове функции erase и insert для двумерного вектора - C++
Тренируюсь с использованием контейнера std::vector. Появляется ошибка при удалении и вставке, помогите понять почему и как её исправить.......

vector.erase - C++
Помогите пожалуйста с синтаксисом удаления любого элемента из вектора Вот тут ошибка: #include <vector.h> void main() { ...

Erase map - C++
Добрый день, мне необходимо удалить из MAP некоторое количество элементов, сейчас я делаю это вот так, но как то не очень красиво for (i...

.erase() в массиве. - C++
есть массив вектор например: vector< pair<char,int> > k; k.second мне надо его удалить как воспользоваться функции k.erase() ;...

vector::erase()? - C++
есть вектор структур struct person{ string name; int age; vector <person> repw;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
07.08.2013, 10:42 #2
О чем ты вообще?
О каком контейнере речь?
У большинства контейнеров модификация инвалидирует итераторы.
0
karl 777
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 63
07.08.2013, 10:52  [ТС] #3
Как написать vector::erase() своими руками, вот о чем.
0
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
07.08.2013, 10:59 #4
удалили it, и сдвинули все за ним на 1 влево... Если речь о vector'e, конечно.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.08.2013, 17:24 #5
Цитата Сообщение от karl 777 Посмотреть сообщение
Как написать vector::erase() своими руками, вот о чем.
Лезем в исходники вектора и смотрим. Благо они прикладываются в довесок к любому компилятору.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
10.08.2013, 22:57 #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)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2013, 22:57
Привет! Вот еще темы с ответами:

вектор алгоритм erase - C++
Доброго всем времени суток.Пожалуйста подскажите чайнику.Пытаюсь из контейнера убрать лишние данные с помощью erase ,но ничего не...

Шаблоны: insert, erase - C++
У меня проблема, как именно нужно описать main и проблема с функцией insert, мне сказали, что в ней может не быть места, чтобы вставить...

stl::list erase() - C++
вот такой код есть, но не работает. как подправить? list<int> ls; list<int>::iterator it; for(int i=0; i<5; i++) { ...

std::vector::erase - C++
Всем привет. Буду очень рад, если кто-нибудь может мне объяснить логику... см. скриншот....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.08.2013, 22:57
Ответ Создать тему
Опции темы

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