|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.03.2011, 17:57 | #1 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
C++ vector::erase
В общем есть класс Student который содержит имя и оценки.
Есть класс Group который содержит в себе изменяемый список студентов (такая мини-бд). Проблема при удалении студента из списка. Ещё мусор какой-то генерится... Кароче вот код, красным выделил места проблем. Код:
|
02.03.2011, 18:04 | #2 | |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Цитата:
Алсо, вместо show_data и show_list перегружай operator<< для ostream.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
|
02.03.2011, 18:07 | #3 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Вот ещё что, ты нарушил один из принципов ООП, поместив поле marks в protected. Его надо поместить в private. Все поля должны быть private. Для доступа мог сделать в private метод, возвращающий константный указатель на начало массива оценок.
И да, насчёт именования. Почитай вторучю половину сообщения (со слов «Всё. Но осталось рассказать о важной вещи. Неотъемлемой частью документации к API и к коду является следование хорошим правилам именования.»): http://www.programmersforum.ru/showt...083#post747083. И последнее приложение в той же теме.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 02.03.2011 в 18:11. |
02.03.2011, 18:14 | #4 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
ну я изначально и хотел с помощью итераторов
Код:
а что вместо i ставить? //upd: ой а кажется надо так: data.erase(it) ? ток ненадо меня бить) "Вот ещё что, ты нарушил один из принципов ООП, поместив поле marks в protected. Его надо поместить в private. Все поля должны быть private. Для доступа мог сделать в private метод, возвращающий константный указатель на начало массива оценок." это сделаю Последний раз редактировалось onewho; 02.03.2011 в 18:16. |
02.03.2011, 18:18 | #5 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Подумай, какой тип у data.begin() и сам поймёшь, что там ставить вместо data.begin()+i.
И да, вместо smth++ лучше писать ++smth, в некоторых случаях это даёт оптимизацию (а по мне так ещё и лучше читается).
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
02.03.2011, 18:31 | #6 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
Код:
не понятно почему data.erase(it); не работает... |
02.03.2011, 18:37 | #7 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Замени на it = data.erase(it). Делов-то.
Ну а лучше сделать так: 1) Делаешь bool Student::operator== (const &Student other) { return strcmp(get_name(),other.get_name()) ; } 2) В твоём методе remove пишешь просто std::erase(std::remove(data.begin() , data.end(), obj), v.end()); И да, у тебя косяк. Не void remove(Student &obj), void remove(const Student &obj) должно быть.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
02.03.2011, 18:43 | #8 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
И ещё косяк:
Код:
Код:
Код:
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
02.03.2011, 18:46 | #9 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
|
02.03.2011, 18:47 | #10 | |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Но это плохой путь, делай через перегрузку оператора и remove.
Цитата:
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
class vector | Proghelper | Помощь студентам | 5 | 09.12.2010 21:31 |
#include <vector> | GBAXA | Visual C++ | 12 | 15.08.2010 11:25 |
итераторы и vector.erase( | Teksa | Общие вопросы C/C++ | 5 | 28.04.2010 15:05 |
vector | NiCola999 | Помощь студентам | 5 | 26.02.2010 08:37 |
std::vector | ciaonataha | Общие вопросы C/C++ | 1 | 10.05.2009 15:50 |