![]() |
|
Модераторы: bsa |
![]()
|
|
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
bsa
Вродебы сделал чего-то сделал Класс
метод
Изменил конструктор
mes Ну я уже взялся, тем более я взялся, чтобы понять как работают классы как перекгружать и т.д. Да конечно я буду использовать свой вектор тока в лабах, но думаю мне пойдет на пользу если я сделаю грамотно всё. |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
А мне показалось, что как раз сейчас самое время показать, как обойти недостатки вектора, и чтоб пришло понимание, что неоптимальность вектора это не вина вектора, а неправильный выбор программистом либо контейнера либо алгоритма использования Добавлено @ 18:04 При таком подходе польза обязательно должна быть Добавлено @ 18:09 изменение типа k на unsigned .. поможет избавиться от ненужной нагрузки на логику такой как проверка k<0. не очень удачное решение, удалять контейнер, до получения нового.. Логичнее заполнять новый, потом swap`нуть и только после этого удалять ненужное.. Добавлено через 7 минут и 49 секунд память находящуюся между size и capacity не нужно занулять.. Это логически лишнее.. Добавлено через 11 минут и 58 секунд интерфейсные (открытые) методы желательно называть неизменным именем, в отличие от приватных членов, которые не столь придирчивы к измененному написанию.. А в общем для них желательно добавлять аффикс, для узнаваемости, чтоб не путать с локальными переменными и передаваемыми параметрами.. Это сообщение отредактировал(а) mes - 2.4.2010, 18:09 |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
Тогда желаю удачи в своем совершенствовании. Это правильная позиция. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну а это что еще за извращение ? увеличивать на коэффицент вместимость нужно только в том случае, если происходит переполнение при вставке, а не тогда, когда напрямую задается размер. Добавлено через 2 минуты и 4 секунды
уже упоминал, но еще раз повторю, что тут наиболее удобными будет один из беззнаковых типов. |
|||
|
||||
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
mes
1.Заменил тип(как посоветовал bsa на size_t, чтож попробуем)
2.Цикл поправил
3. А вот насчет
не совсем понял почему, тогда придется еще дополнительно мне перегрузить operator=, чтобы уж было красиво. 4.Я не понимаю почему тогда столько книг написано по STL и довольно многие пользуются, что не глянь тему, люди вашего уровня все переделывают на vector, iterator и пишут,что лучше его использовать(да наверно не везде)... |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
лучше чем самопально написаннный динамический массив, а также он самый простой для понимания, и лучше для тех, кто не сталкивался еще с стл, в остальных случаях какой из конкейнеров лучше, а может даже какая их связка, зависит от решаемой задачи. добавлю сразу, что на текущий момент стл не покрывает всех потребностей в контейнерах, но их хватает на основные жизненые случаи. Добавлено через 1 минуту и 48 секунд
нет, лучше добавить оператор swap , пригодится не только для текущей ситуации... не бойтесь он очень простой в реализации |
|||
|
||||
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Исправил, пока без swap'a
и конструктор заодно
Еще + в том, что я сразу могу проверить свой вектор на деле( я с помощью него дерево храню эн-мерное, в соседней теме) Это сообщение отредактировал(а) toxx - 2.4.2010, 18:38 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вместимость не может быть меньше размера.. Добавлено @ 18:56 у вас получается, что вместимость всегда равна степени 2ки, а суть не в этом, а в том чтоб увеличивать текущую вместимость на определенный коэффициент. кстати хотелось бы также отметить, что коэф. 2 не самый оптимальный, но для простоты пойдет. Добавлено @ 18:57 В остальном нужно подождать, пока внесете изменения уже озвученные в этой теме.. Это сообщение отредактировал(а) mes - 2.4.2010, 19:01 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
ИванМ,mes
Да... идей вы мне подкинули массу, спасибо. Как с деревом разберусь еще добавлю идею swap(mes'a). Это сообщение отредактировал(а) toxx - 2.4.2010, 21:09 |
|||
|
||||
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
mes
А скажите пожалуйста основную идею swap? т.е. как я понял(т.е. не понял) если менять местами векторы Х и Y это чтото типа
тогда применительно к чему вызывать этот метод?(я написал свой метод и объявил его другом для класса, походу это не верно...)
вот что получилось(если честно судя по моему забору он не верный...+ он не компилируется)
Еще есть идея, что он как конструктор копирования вызывается для указателя(это больше похоже на правду) |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
все гораздо проще:
Это сообщение отредактировал(а) mes - 3.4.2010, 20:23 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
mes
оу, до такого ябы не додумался(даже не знал о существовании такого) Переписал resize() со swap capacity у меня по степени двойки=)
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вы уверены ? попробуйте исправить сами без подсказки .. Добавлено @ 21:17 имхо логичней все таки
Это сообщение отредактировал(а) mes - 3.4.2010, 21:18 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
mes
Интересно, я сначала подумал почему не работает... потом откомпилировал 5 раз подряд из них 4 раза компилирует и работает, на 5й показывает ошибку доступа к памяти crtexe.c
Это сообщение отредактировал(а) toxx - 3.4.2010, 22:25 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вообще-то resize() возвращает void ну а ошибки не все исправили .. Это сообщение отредактировал(а) mes - 3.4.2010, 22:30 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |