|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||||||||||||||||||
Ошибка при использовании erase для std::vector21.12.2016, 10:28. Показов 6114. Ответов 55
Метки нет (Все метки)
Почему в случае удаления элемента из вектора с помощью передачи итератора в erase, который соответствует позиции удаляемого элемента возникает ошибка(сегфолт)?
Но при этом с той же позиции итератора которая приводит к сегфолту при удалении, получается вывести значение Т.е при очистки элемента получаем сегфолт, а при выводе значения адрес каким то образом оказывается валидным и значение выводится успешно
Добавлено через 11 минут Вот, может так будет нагляднее
0
|
||||||||||||||||||||||
| 21.12.2016, 10:28 | |
|
Ответы с готовыми решениями:
55
std::vector::erase
Ошибка “vector<bool> erase iterator outside range” при работе алгоритма Хаффмана |
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 22.12.2016, 13:15 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 22.12.2016, 13:23 [ТС] | |
|
DrOffset,
Не обошлось без твоей большой помощи, за что тебе ещё раз спасибо )) что бы реализовать такой контейнер, достаточно обойтись заменой аллокатора? Или ещё что то нужно будет сделать? По использованию своего аллокатора для map не могу найти доступную информацию Может ты знаешь где можно прочитать об этом более подробно? Что бы у меня появилось достаточно знаний для того что бы запрограммировать это Добавлено через 1 минуту И ещё важно что бы все операции с данными контейнера (поиск, вставка, пометить кусок как свободный) происходили за константное время Добавлено через 1 минуту А map насколько понимаю использует двоичный поиск, а это уже не константное время как минимум для поиска так же он будет тратить время на то что бы хранить ключи упорядоченно это все лишняя трата ресурсов которая мне не нужна
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 22.12.2016, 13:32 | |||
Хочешь, чтобы все "бесплатно" было? О-характеристики вставки и поиска останутся теми же, аллокатор на это не повлияет. Если тебя устраивает хеш-контейнер по характеристикам, то можно попробовать поменять аллокатор у unordered_map. Вообще, в таких специальных случаях каждое решение нужно рассматривать отдельно. Например, если нужен быстрый поиск и относительно быстрая вставка, а элементы должны храниться в непрерывном куске памяти и при этом они поддерживают быстрый swap, то можно действительно сделать вектор пар (с резервом памяти), сначала добавить туда все элементы, потом разом отсортировать, а потом за O(log(n)) искать в нем бинарным поиском. Все за и против решаются профилированием и требованиями конкретной задачи. При этом надо понимать, что абстрактная оценка O(1) в конкретном случае (на практике) может быть хуже, чем абстрактная O(log(n)) из-за свойств данных, которые мы обрабатываем. Поэтому только профилирование.
1
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 22.12.2016, 14:09 [ТС] | ||||
|
Добавлено через 1 минуту
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 22.12.2016, 14:41 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 22.12.2016, 14:43 [ТС] | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 22.12.2016, 14:49 | |||
|
это экономия уже даже не на спичках, а на микробах ![]() умные компиляторы умеют строить умный машинный код. программы на плюсах эффективнее какого нибудь питона просто потому что плюсы. а оптимизировать есть смысл только если будут реальные тормоза. и только те места, на которые реально укажет профайл. не над тромбовать себе моск))) а аллокаторы готовые можно нарыть в интернетах. на СО есть кучка простых но годных реализаций. специально, что для обучающих целей.
1
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||
| 22.12.2016, 14:56 [ТС] | |||||
![]() За одно и детали изучить, левел ап как никак
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 22.12.2016, 15:22 | |||
|
об алгоритмах, структурах, готовых либах, что обычно пишутся на си)) но не об оптимизации на спичках. ради копеечного прироста производительности, вы хотите привнести в проект вместо того, что бы взять какой нибудь std::unordered_map, и простым способом порешать задачу за 5 минут. я уже молчу, про то, что если вы там парсить xml собрались, то первая же однократная операция чтения данных с диска, и все эти ваши оптимизации не заметит даже центральный процессор
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 22.12.2016, 15:29 [ТС] | |
|
hoggy,
Ну можно же 1 раз реализовать, а потом использовать там где нужно ![]() При этом пользоваться только наружним API контейнера, и говнокод будет скрыт )
0
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 22.12.2016, 16:54 | ||
|
Добавлено через 1 минуту
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 22.12.2016, 17:09 | ||||
|
Оценка времени в константу дается для общего случая, а конкретный профит или его отсутствие можно получить только на конкретных данных. На конкретных данных и конкретном железе вполне может быть так (просто как пример), что неэффективная в общем случае пузырьковая сортировка будет лучше, чем quicksort. ![]() Любой поиск использует характеристики данных, если это строки, то затраты на поиск будут одни, если числа - другие. Алгоритмы стоит выбирать исходя из эффективной применимости их к рассматриваемому набору данных, а не на основании общих положений. Общие положения годятся только для примерной теоретической оценки.
1
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 22.12.2016, 17:29 [ТС] | ||||
Хеш ведь вычисляется за константное время(ну или почти), так? Вычислили ключ и делаем что нужно, вставку или поиск по ключу (точнее, arr[hashkey] для поиска, arr[hashkey] = value для вставки)
0
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 22.12.2016, 17:38 | ||||
|
Например хеш от строки может быть вполне линейным. При этом, если образовалась коллизия, то нам все-таки потребуется еще и сравнение самих строк. Добавлено через 2 минуты sys_beginner, вообще советую взять какую-нибудь хорошую книгу по алгоритмам, Седжвика, Кнута или Кормена, и хотя бы полгодика поизучать, а потом уже возвращаться к теме оптимизации. Мы же помним, что "преждевременная оптимизация - корень всех зол"?
3
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 22.12.2016, 17:48 [ТС] | ||||
|
Мне легче дается когда возникает задача и нужно её решить определенным способом Я долго бьюсь в поисках решения но из за долгих размышлений общие принципы конкретного решения хорошо откладываются
0
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 22.12.2016, 17:55 | ||||
![]() Но это лишь частный случай. Я хотел сказать, что нужно помнить о том, что серебряной пули нет. И утверждать, что какое-то средство всегда лучше - опрометчиво и недальновидно.
1
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 22.12.2016, 17:59 [ТС] | |||
знать бы где именно
0
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 23.12.2016, 10:28 [ТС] | |
|
DrOffset,
Пришел к тому, что хеш таблица не поможет для решения данной задачи Ошибка при использовании erase для std::vector плюс нужна константная сложность для поиска по индексу/удаления/вставки Попробую объяснить почему Насколько я понимаю, хеш функция без коллизий реализуется использованием отстатка деления индекса на фиксированное количество элементов(плюс ещё какие то не понятные мне побитовые операции и сдвиги что бы избавиться от коллизий). Но как это работает до меня не доходит. Ведь например есть массив из 5 элементов, так? Если туда передать десять разных ключей, то получится что будет либо коллизия, либо выход за границы массива. Для коллизий прочитал что используют связные списки. Но что если списки мне не нужны. Ну не нужно мне хранить под одним ключом несколько значений. Когда следует применять perfect hash, так и не понял Но явно не в моем случае, да?Добавлено через 8 минут Помоему в решении данного вопроса нужна идеология того аллокатора который ты помог мне разобрать Но как туда прикрутить индексы с константной сложностью для добавления/удаления/поиска по индексу пока не могу понять Но чую там что то нужно изменить т.к на одном списке в данной задаче далеко не уедешь Добавлено через 3 минуты Пока самый тупой вариант который пришел мне в голову это создать обычный массив Type *t = new Type[size] и зарезервировать место для хранения большого числа элементов. Тогда сложность вроде будет константная. Да? Но допустим в конкретном случае у меня будет 5 элементов в массиве с индексами 1000,2000,3000,4000,5000. Выходит из за 5 элементов мне нужно будет зарезервировать место для 5000 элементов что слишком много. А дальше если появится индекс с ещё большим числом, прибавить ещё места в массиве что бы сохранить этот индекс Но может быть реально и 3000 элементов, когда как.
0
|
|
| 23.12.2016, 10:28 | |
|
Ошибка: Out of range при использовании <vector> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|