|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||||||||||||||
О деталях и возможностях реализации <vector>06.04.2016, 04:17. Показов 3611. Ответов 82
Метки нет (Все метки)
из кода AnsiString (той которая в комплекте C++ Builder)
в подавляющем большинстве случаев разумно вот так:
0
|
||||||||||||||||||
| 06.04.2016, 04:17 | |
|
Ответы с готовыми решениями:
82
О возможностях реализации поставленных задач Скрыть <iostream> в деталях реализации
|
|
2083 / 1576 / 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 / 1576 / 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 / 1576 / 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 / 1576 / 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 / 1576 / 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 / 1576 / 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 / 1576 / 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Новости компьютерного мира и их обсуждение (4)
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|