Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика


Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2009, 22:20   #1
AxenicX
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 65
По умолчанию С++. Почему удаляется последний эелемент?

Код:
krai.erase(krai.end());
Пол дня из-за этого %;&^№@ мучаюсь с задачей.
Почему удаляется последний эелемент?
Контейнер край является декой.
AxenicX вне форума Ответить с цитированием
Старый 29.11.2009, 22:36   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А какой должен удаляться? Хотя странно, что удаляется последний, метод end() возвращает указатель на следующий за последним элемент, должно было бы выскочить нечто вроде AV
netrino вне форума Ответить с цитированием
Старый 29.11.2009, 22:41   #3
AxenicX
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 65
По умолчанию

И я о том же! Что end() возвращает СЛЕДУЮЩИЙ за последним эелемент, следовательно контейнер не должен изменяться! А что такое AV?
Мож это из-за компилятора кривого? Использую code::blocks.

Последний раз редактировалось AxenicX; 29.11.2009 в 22:48.
AxenicX вне форума Ответить с цитированием
Старый 29.11.2009, 23:00   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

AV - ошибка доступа. А в чём смысл удалять следующий за последним элемент? Не надо так делать. Последний элемент не удаляется, он просто занимает место end. Будь у вас вывод до end+1, то вы увидели бы и последний элемент
netrino вне форума Ответить с цитированием
Старый 29.11.2009, 23:42   #5
AxenicX
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 65
По умолчанию

На самом деле код идет такой:
Цитата:
krai.erase(unique(krai.begin(),krai .end()));
Тоесть удаляются все дубликаты, но дубликтов нет, следовательно и удалений происходить не должно, а они происходят, почему?

Если это важно, то эелементами контейнера krai(тип deque) являются pair<int,int>

Последний раз редактировалось Stilet; 30.11.2009 в 11:47.
AxenicX вне форума Ответить с цитированием
Старый 30.11.2009, 00:41   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Вы неправильно ф-цию используете. unique сама удаляет одинаковые, рядом стоящие элементы, а возвращает новое положение end.
Подробности
То есть в вашем случае:
Код:
krai.resize(unique(krai.begin(), krai.end()) - krai.begin());
netrino вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объясните почему рубится последний символ hen Общие вопросы C/C++ 4 07.04.2009 21:01
Последний раз выполнялось anton14 Общие вопросы Delphi 3 20.10.2008 18:34
Не удаляется файл. Манжосов Денис :) Общие вопросы Delphi 2 21.08.2008 15:41
Не удаляется папка. Kashp Операционные системы общие вопросы 9 31.01.2008 10:49
[autorun] Последний вопрос Ivan_assm Помощь студентам 2 05.11.2007 20:10

Реклама для незарегистрированных, регистрация на форуме