|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||||||||||||||
О деталях и возможностях реализации <vector>06.04.2016, 04:17. Показов 3527. Ответов 82
Метки нет (Все метки)
из кода AnsiString (той которая в комплекте C++ Builder)
в подавляющем большинстве случаев разумно вот так:
0
|
||||||||||||||||||
| 06.04.2016, 04:17 | |
|
Ответы с готовыми решениями:
82
О возможностях реализации поставленных задач Скрыть <iostream> в деталях реализации
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||
| 08.04.2016, 06:51 [ТС] | |||||
|
Добавлено через 2 минуты Добавлено через 9 минут Добавлено через 22 минуты Вот в том то и дело, что куда не ткнись а везде специализированный под задачу массив гораздо лучше stl-кого вектора. Сами ведь знаете - эксклюзив всегда качественней ширпотреба. Вот std и есть такой ширпотреб который проектируется абсолютно без информации в какой задаче он будет использован, а соответственно и без оптимизации под эту задачу. Поэтому и непригоден нигде кроме хеллоувердов.
0
|
|||||
|
66 / 66 / 31
Регистрация: 11.03.2016
Сообщений: 252
|
|||
| 08.04.2016, 07:31 | |||
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||
| 08.04.2016, 07:34 | ||||
|
А если это 3D сцена, то идем сносить все комнаты по критерию "не попадают в кадр". Вот потому, собственно и вектор. Доступен из коробки, дает гарантии приличной скорости работы, дает гарантии непрерывного размещения элементов. И если при его использовании не видно разницы, зачем кодить больше?
0
|
||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||||||
| 08.04.2016, 15:56 [ТС] | ||||||||||
|
Кстати попытки запихнуть одним шматом из того что возвращает data() почему то заканчиваются Access Violation на первом же байте. Что самое интересное после замены вектора на свои массивы никаких проблем. Добавлено через 2 часа 24 минуты Т.е. в STL вообще ничего нужного нет. Добавлено через 1 час 8 минут Добавлено через 4 часа 15 минут hoggy, DeadPenguin, Renji, Вопрос знатокам STL:
0
|
||||||||||
|
93 / 85 / 40
Регистрация: 06.02.2014
Сообщений: 122
|
|
| 08.04.2016, 16:30 | |
|
То, что Вы навелосипедили, есть в STL. Называется deque.
Список указателей с произвольным доступом магически получается, если в список с произвольным доступом(например, deque) класть указатели. Деревья в STL есть. Может быть, они не подходят к Вашей задаче, но они там есть. Set и map сделаны на деревьях. Возможность, позволяющая организовать взаимодействие контейнера с хранимыми объектами и оповещения подписчиков, называется "наследование". Добавлено через 22 минуты Объект, который знает о контейнере, в котором лежит (раз уж может отправить ему уведомление), это очень, очень плохой стиль. И delete this - это тоже очень, очень плохой стиль. Хотя бы потому, что это налагает кучу ограничений на способ создания объектов. Добавлено через 9 минут Один из параметров любого контейнера в STL - аллокатор. Пишете аллокатор и извращаетесь как угодно. Если очень хочется делать delete this - пишете аллокатор, который не будет вызывать для удаляемых объектов деструктор. Если очень хочется итерироваться по контейнеру и одновременно удалять из него объекты - можно, например, отнаследоваться от контейнера и сделать удаления откладываемыми.
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||||||||
| 08.04.2016, 17:25 [ТС] | |||||||||||||
|
Добавлено через 4 минуты Добавлено через 16 минут Добавлено через 13 минут Добавлено через 10 минут А если по человечески писать то все просто получается в результате:
0
|
|||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||
| 08.04.2016, 19:05 | |||||||||||||
|
"не читал, но осуждаю". и потом, ключевым моментом в вашем отношении является "малочитабельный" фактор. то бишь, она не нравится вам не потому, что существуют какие то объективные причины ущербности библиотеки. а потому, что вам тупо сложно с нею работать. эксепшены используются в тех случаях, когда сбойная ситуация - это нечто реально ожидаемое. что-то, что вполне реально может произойти. при этом, программа не должна упасть. она должна корректно обработать искл. ситуацию, и продолжать работать дальше. вот вам ещё пример: нужно сохранить данные на жестком диске. мы не можем заранее знать, получится ли это сделать. вдруг в этот самый момент кто-то другой записал данные, и на диске тупо не хватит места? но если действительно возникнет проблема, мы просто покажем пользователю окошко: "не хватает места". и сделаем отмену. если пользователю нужны эти данные, он освободит место и ещё раз зделает сохранение. понятно, что снаружи тоже нужно выполнять проверки. речь жеж не об этом. речь о том, что бывают ситуации, когда некорректные данные случаются не по вине сбойного алгоритма, а в силу причин, которые не контролируются нашей программой. в данном случае этой причиной является блондинка, которая из консольки вбивает индекс. касательно производительности: ошибки алгоритмов валидируются ассертами. поэтому нет никаких пенальти в релизе. ошибки пользовательских данных, либо сторонних процессов обрабатываются механизмом исключения. вылет на ассерте - это требование программиста. птичка должна разбиться на тестах в случае, если программисты накосячили. но исключения нужны именно для того, что бы птичка оставалась в воздухе. причем вопреки возможным сбоям. причем вопреки программным ошибкам так же. мой отец - инженер, говорил так: вероятность деффекта деталей - одна тысячная. в обычном авто 10 000 деталей. это значит, что как минимум 10 из них - бракованные. но машина ездиет. примерно точно так же дела обстоят с программами. программа управляет полетом звездолета. и в ней есть ошибки. тем не менее звездолет летит. это достигается за счет возможности сделать приложение отказоустойчивым, благодаря эксепшенам.
в майне я получаю информацию не о самом последнем эксепшене, а обо всей трассе, где они вылетали. я могу наблюдать развитие болезни от места её зарождения, и до гибели процесса. но именно по той причине, что я умею эксепшены, с позиции своих знаний о них, я могу заявить: они не предназначены для отладки. и хотя их можно (и нужно) использовать в этом качестве, нельзя забывать о настоящем их предназначении. восстановления после паники. отказоустойчивая программа не должна полагаться на собственную корректность. напротив: она предполагает, что какой либо (не известный заранее) её узел может дать сбой. при этом никто не должен пострадать. весь остальной текст - это описания ассерта, а не эксепшена. в деструкторах, в функциях тредов, в других подобных местах, нужно в обязательном порядке располагать ловушки. потому что если вылетит - положит весь процесс. соотвественно, ловушка должна быть. но если эксепшен не вылетит, потому что его выпилили в релизе, тогда и код ловушки тоже нужно выпиливать. ловушки - не бесплатны. это сказывается на производительности. вы увидите точно такой же стек вызовов, и бла бла бла. но как можно было не осилить ассерт???
0
|
|||||||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 08.04.2016, 19:05 | |||
|
Для не реалтайма же известна типичная нагрузка, на которой пользователь едва ли заметит эффект от подобных шаманств. А к тормозам на сто гиговом буфере все относятся с пониманием.
0
|
|||
|
93 / 85 / 40
Регистрация: 06.02.2014
Сообщений: 122
|
|
| 08.04.2016, 19:16 | |
|
На переписывание с нуля не тянет.
Уведомление подписчиков: отнаследоваться, в наследнике нужно поле - контейнер для подписчиков, пара функций для подписки и отписки. И там, где Вы хотите, чтобы контейнер о чем-то уведомля, перегружаем метод, пишем в нем уведомление и пишем в ней вызов метода базового класса. Стандарт не конкретизирует, какой величины страницы должны быть в deque. Не нравятся выбранные изготовителем Вашего компилятора (насколько мне известно, 16 байт исключительно в вижуал студии) - можно отнаследоваться и использовать какие хочется. Хотя, конечно, в случае с вижуал студией проще переписать, да. В gcc это гораздо проще. И то и другое избавляет от кучи внешнего геморроя, зато добавляет кучу внутреннего. Кладём в список владения shared_ptr, кладём в остальные списки weak_ptr. Когда надо удалить - удаляем из списка владения и всё. При проходе по остальным спискам одновременно вычищаем невалидные weak_ptrы. Или, когда по списку проходим, невалидное игнорируем, но время от времени вычищаем отдельным проходом. Внезапно, стандартных контейнеров для этого вполне достаточно. Писать надо гораздо меньше -> багов гораздо меньше -> гораздо более по человечески, чем писать две собственных разных реализации списков. Добавлено через 7 минут //Коммент для Fulcrum_013 //извиняюсь, что без цитат - с мобильного устройства адски неудобно
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 08.04.2016, 19:37 [ТС] | |||
|
Добавлено через 59 секунд
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 08.04.2016, 19:37 | |
|
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 08.04.2016, 19:39 | ||
|
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 08.04.2016, 19:45 [ТС] | ||||
|
А вот просто сделав систему оповещения об удалении один раз все работает как часы. при этом объект можно грохнут как извне так и изнутри. Добавлено через 3 минуты Добавлено через 1 минуту
0
|
||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||||
| 08.04.2016, 19:49 | ||||||||
0
|
||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 08.04.2016, 19:54 | |
|
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 08.04.2016, 19:56 | ||
|
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 08.04.2016, 19:57 [ТС] | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 08.04.2016, 20:00 | ||||
|
после этого отладчик будет брякаться на исключениях.
1
|
||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||
| 08.04.2016, 20:05 [ТС] | |||||||
|
Добавлено через 1 минуту да точно внесен. Потому как вот так останавливается.
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 08.04.2016, 20:06 | |
|
0
|
|
| 08.04.2016, 20:06 | |
|
error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main О возможностях С++
О возможностях ACCESS Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|