Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614

О деталях и возможностях реализации <vector>

06.04.2016, 04:17. Показов 3512. Ответов 82
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
 Комментарий модератора 
Эта тема выделена из темы: Работа с векторами без использования STL и библиотеки <vector>


Цитата Сообщение от hoggy Посмотреть сообщение
если он не будет защищен внутренними проверками.
я б такую халтуру вообще бы не принял.
Ну это уже в зависимости от зависимости. Примерно в 50% случаев внутренняя проверка только дает оверхед.
из кода AnsiString (той которая в комплекте C++ Builder)
C++
1
2
3
4
5
char operator [](const int idx) const
    {
      ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead ??
      return Data[idx];
   }
Так и сидит в инклюде который идет в поставке с таким комментарием.
в подавляющем большинстве случаев разумно вот так:
C++
1
2
3
4
5
6
7
char operator [](const int idx) const
    {
#ifdef __DEBUG__
      ThrowIfOutOfRange(idx);
#endif
      return Data[idx];
   }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.04.2016, 04:17
Ответы с готовыми решениями:

О возможностях реализации поставленных задач
Здравствуйте уважаемые форумчане. На работе встала задача написать программу, которая из одной таблицы excel перетаскивала бы...

Скрыть <iostream> в деталях реализации
Здравствуйте, необходимо переместить #include &lt;iostream&gt; из .h в .cpp, и при этом использовать std::cout в определении шаблонной...

Программа для реализации арифметических операций Matrix, Vector
Помогите написать программу, для реализации арифметических операций классов Matrix, Vector.Спасибо заранее!

82
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 20:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
да точно внесен. Потому как вот так останавливается.
Не внесен он никуда. Просто, std::runtime_error - наследник std::exception, а std::exception (и всех его наследников) велено ловить силами программы. Про "Сишные строки" же в catch секции ничего не сказано, так что они летят к отладчику.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2016, 20:18  [ТС]
Цитата Сообщение от Eldies Посмотреть сообщение
Внезапно, стандартных контейнеров для этого вполне достаточно.
Геморойно вся эта байда. Проще один раз изобрести список с константным временем удаления по значению элемента, пусть даже и завязанный так или иначе на элемент. Особенно если с расчетом на реюзание элементов. т.е. "удаленные" отдыхают в отдельном списочке пока не понадобятся, а физически распределяются страницами. Во всяком случае для тех кто могут интенсивно добавляться/удаляться.
Опять же это в реалтаймовой части. В части редактора и списков с O(n) временем удаления, а тем более с O(log(n)) будет выше крыши.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
казалось бы: и при чем тут stl?
Ну или msvc в связке с stl екскепшинами
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 20:19
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
т.е. "удаленные" отдыхают в отдельном списочке пока не понадобятся, а физически распределяются страницами. Во всяком случае для тех кто могут интенсивно добавляться/удаляться.
Вы пытаетесь изобрести концепцию алокатора. Второй аргумент std::list для подобного выпендрежа и предназначен.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2016, 20:36  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
Второй аргумент std::list для подобного выпендрежа и предназначен.
Не хватало еще чтобы списки выделяли память под элементы. Не его списка забота откуда элемент взялся, куда элемент после удаления идет, и в какой список еще его потом всунут. тут им через перегрузку операторов new/delete действовать надо.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 20:38
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Не хватало еще чтобы списки выделяли память под элементы.
А он и не выделяет. Он использует выделятор переданный вторым аргументом.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.04.2016, 20:45
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну или msvc в связке с stl екскепшинами
казалось бы, при чем тут msvc?
1
08.04.2016, 20:46

Не по теме:

hoggy, Renji, бросьте вы эти глупости, вы же видите, что перед вами какой-то неадекват. Человек не то что не понимает, как STL работает, так ещё и переизобретает велосипеды с адовой скоростью. А ещё (что и неудивительно в силу вышеперечисленного) он лучше всех вас знает, как писать ПРАВИЛЬНЫЙ код, как работает дебаггер и зачем нужны исключения.

0
08.04.2016, 20:54

Не по теме:

Цитата Сообщение от DeadPenguin Посмотреть сообщение
бросьте вы эти глупости, вы же видите, что перед вами какой-то неадекват.
тем не менее, это человек моей породы.
и с ним мне общаться интереснее, и приятнее, чем со студентами,
которые требуют свои хелловорлды,
даже не поздаровавшись.

0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2016, 21:10  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
А он и не выделяет. Он использует выделятор переданный вторым аргументом
То я знаю. Только толка от этого как с козла молока. Потому как выделятся они будут совсем не выделятором списка а на стороне. И удаляться тоже. т.е. смысл - вызвал delete он из всех списков выбросился, и в список свободных этого типа ушел. вызвали new - дернули из списка свободных, поместили в какие нужно списки. При этом общее количество очень быстро устаканится на каком то числе. Самый главный вопрос утрясти все это с наследованием и динамическим полиморфизмом, потому как в списках отдыха они естественно должны по типам сидеть, а пихать каждому указатель на список в который его отправлять на отдых тоже не есть очень карашо, так же как и виртуальную функцию возвращающую статик в каждый копипастить . млин лучше бы оператор __classid стандартизировали, и остальную rtti чем лисапеды стандартизировать из серии лаб первого семестра, причем еще и превращающих текст в говнокод.
Лисапед это таки очень многовариантная high-tech штука, на которую патенты выдают не раз в 10 лет как на колесо, и не раз в год как на гусеницу, а не реже раза в месяц.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 21:32
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
То я знаю. Только толка от этого как с козла молока. Потому как выделятся они будут совсем не выделятором списка а на стороне. И удаляться тоже. т.е. смысл - вызвал delete он из всех списков выбросился, и в список свободных этого типа ушел.
Тогда действительно перегрузите operator new/operator delete для конкретного типа. Кто-то мешает что ли?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
млин лучше бы оператор __classid стандартизировали
typeid в стандарте еще с прошлого века.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2016, 21:54  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
Кто-то мешает что ли?
Да нет никто не мешает. просто вот пришла мысль и я ее думаю. Как это перегрузить так чтобы для потомков не переписывать и каждый в своей тарелька сидел.
Цитата Сообщение от Renji Посмотреть сообщение
typeid в стандарте еще с прошлого века.
а вот так этот typeid умеет:
C++
1
FreeLists[__classid(this)]->Add(this);
Ну а чтобы из списка по указателю на элемент ремувить за O(1) элемент должен быть на список завязан. т.е. опять STL в пролете.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 22:08
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Да нет. только вот чтобы из списка за O(1) ремувится нужно чтобы элемент был на список завязан.
Делается через сохранение в элементе итератора на узел списка. Хотя да, оптимальней было бы отнаследоваться от абстрактного list_node.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а вот так этот typeid умеет:
Умеет. Про ассоциативные массивы слышали?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2016, 22:11  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
Про ассоциативные массивы слышали?
а за O[1]?

Добавлено через 1 минуту
Неужели компилятору так трудно положить в VMT ее порядковый номер и по оператору его возвращать?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 22:12
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а за O[1]?
А за сколько по вашему std::unordered_map работает?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2016, 22:13  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
А за сколько по вашему std::unordered_map работает?
O(log(n)) не быстрее однозначно.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 22:16
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
O(log(n)) не быстрее однозначно.
Значит, идите курить маны. Оно на хеш-таблицах, так что в 99% случаев работает за константное время. Еще 1% на феерических неудачников, словивших лбом фантастическое число коллизий.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2016, 22:20  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
Оно на хеш-таблицах, так что в 99% случаев работает за константное время.
Время вычисления хеша? Время сравнения? константное время тоже понятие растяжимое 1e1024 тоже константа.
Lists[__classid(this)] работает за нулевое время. ни одного сравнения. без всяких коллизий
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 22:27
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Время вычисления хеша? Время сравнения? константное время тоже понятие растяжимое 1e1024 тоже константа.
"Вычисляется" через typeid(*this).hash_code(). Если авторы компилятора не совсем идиоты, то очевидно что hash_code тупо возвращает вбитую на стадии компиляции константу.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
08.04.2016, 22:41  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
Если авторы компилятора не совсем идиоты, то очевидно что hash_code тупо возвращает вбитую на стадии компиляции константу
Которая потом в этом унордеред мап сравнивается с каждым насколько понимаю.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.04.2016, 23:11
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Которая потом в этом унордеред мап сравнивается с каждым насколько понимаю.
Гугл, "хеш-таблица". Ни с чем там хеш не сравнивается, он используется как индекс в хеш-таблице (константное время). После чего из таблицы извлекается список всех элементов с идентичным хешем. В нормальных условиях это полтора элемента. Вот у этих полутора элементов да, ключи сравниваются с образцом. При этом пихать в такой мап можно любые значения, не задаваясь вопросом "а не окажется ли __classid равным over 9000 и не вылечу ли я за границы массива?". Хотя, конечно, последнее не всегда актуально.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2016, 23:11

Написать шаблон класса на основе класса vector для реализации стековой структуры данных
Пыталась написать код, но не уверена будет ли такая реализация корректной, можно ли это сделать как-то по - другому? И как надо...

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt;...

О возможностях С++
Можно ли с помощью С++ авторизоваться на каком-то сайте ? Скачать определенный файл с сайта ? Работать с mysql ?

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>)
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...

О возможностях ACCESS
Здравствуйте, товарищи специалисты, суть вопроса такова: Возможно-ли в акесе реализовать бд содержащую древовидный каталог? Причём...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
сукцессия 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-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru