|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||||||||||||||||||
Ошибка при использовании erase для std::vector21.12.2016, 10:28. Показов 6469. Ответов 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
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 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
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 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
|
||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 22.12.2016, 17:38 | ||||
|
Например хеш от строки может быть вполне линейным. При этом, если образовалась коллизия, то нам все-таки потребуется еще и сравнение самих строк. Добавлено через 2 минуты sys_beginner, вообще советую взять какую-нибудь хорошую книгу по алгоритмам, Седжвика, Кнута или Кормена, и хотя бы полгодика поизучать, а потом уже возвращаться к теме оптимизации. Мы же помним, что "преждевременная оптимизация - корень всех зол"?
3
|
||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 22.12.2016, 17:48 [ТС] | ||||
|
Мне легче дается когда возникает задача и нужно её решить определенным способом Я долго бьюсь в поисках решения но из за долгих размышлений общие принципы конкретного решения хорошо откладываются
0
|
||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 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> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|