![]() |
|
Модераторы: bsa |
![]()
|
|
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну я только слегка подскажу.. функция erase не вызывает переаллокации и никак не влияет на вместимость, она только удаляет (затирает) ненужный элемент. |
|||
|
||||
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
А я нашел...)))
Нужно добавить:
Память массива не увеличивалась, но цикл шел и обнулял до новой помяти=)
Добавлено через 4 минуты и 13 секунд или не нашел... Добавлено через 7 минут и 20 секунд А если убрать в erase()
То тоже работает, да верно этот метод я не трогал с последних советов ИванМ А щас нужно измить слегка с учетом новых методов. |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а вызов reserve() на что ? вообще то новые методы на функционал erase не влияют .. |
|||
|
||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
mes
Тогда странно, если не влияют я при удалении вершин использую только erase()
Еще также использую resize() при создании дерева. Да, я понимаю что reverse() вместо этих строк
Но если они присутствуют всё работает =) |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну так значит надо внимательно просмотреть логику .. Насколько я заметил Вы использовали мой код без изменений, а я предупреждал , что в нем могут быть ошибки. Вот сейчас просмотрел и бросилось в глаза а должно быть, и об этом уже писалось :
хотя нужность коэффициента при resize сомнительна, и мне кажется, что он необходим при "шаговом" заполнении, т.е. при push_back. |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
mes
Да, без изменений признаю.Но как говорится доверяй, но проверяй.Я предварительно проверил на различных массивах и с использованием методов разных. Всё работало.Так бы эта ошибка и была, только сегодня я решил опробовать обновлённый вектор на моей лабораторной(ну вот стукнуло). Там совсем другая структура ( дерево n- мерное). И ошибка памяти... Сначала посмотрел, нашел где ошибка ... ну приблизительно. Менял несколько раз этот resize(), потом только решил обратиться.Так, что чуть что, я не пишу пост просто так... А насчет метода reserve() я как раз вчера нашел(как раз, то что вы пишите), что он эффективен только если мы добавляем элементы методом push_back. Выделили приблизительно сколько нам нужно памяти и добавляем. |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
это в случае предварительного вызова reserve () "из вне".. а я говорил о случаях вызова reserve самим вектором при нехватки памяти.. ну так последнее замечание помогло ? или еще есть ошибка? советую сделать функцию vector_debug (..) выводящая все необходимые данные массива, в том числе и вместимость и поиграться с вектором, передавая его после каждого крупного измения на вывод - сразу будет видно на какой функции ошибка и где нестыковки.. Добавлено @ 22:31 кстати.. Внутри вектора Вы используете (*this)[] хотя в большинстве случаев логичней использовать блок данных напрямую, то есть V[]. ну а также хотелось бы показать на отсутствие вызова деструктора у объектов контейнера, что в принципе на текущем этапе не серьезно.. Добавлено @ 22:35 ну тогда ловите и стирание :
Это сообщение отредактировал(а) mes - 4.4.2010, 22:36 |
||||
|
|||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
mes
Да, работает Спасибо=) Я также тестировал вчера предложенные вами функции Там ничего не было...Другое дело сегодня заменил старые функции при работе с деревьями и понеслось как говориться =) Еще я параллельно читал Страуструпа у него есть в книге "Язык программирования С++ спец. изд." Очень интересная глава "Безопасность исключений и стандартная библиотека" Так вот в ней я подсмотрел перегрузку оператора []
Также прочитал (гарантии с контейнерами) и обратил внимание, что у вектора какието слабые гарантии либо прочерки вообще стоят Там в виде таблицы для vector deque list map |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
у стандартного вектора доступ посредством [] не контролирует границ, а для контролируемого доступа есть функция at(). |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
mes
Вот откуда вы берёте информацию? Вы так уверенно говорите как будто у вас перед глазами эта библиотека Или же вы уже имели дело с её написанием? Ведь действительно это функция at(size_t i)... Это сообщение отредактировал(а) toxx - 4.4.2010, 23:15 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
при столкновении с вопросами по стл в первую очередь лезу в документацию на сайте cplusplus.com ну вектор это самое простое из стл, его фактически все знают. так же как и Вы проходил написание собственного векторного велосипеда плюс имеется небольшой опыт работы с с стл. Это сообщение отредактировал(а) mes - 5.4.2010, 10:25 |
|||
|
||||
![]()
|
| Правила форума "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. |