@ProCxx

Страница 171 из 2477
KrivdaTheTriewe
14.05.2016
15:17:35
Я там сейчас работаю

Andrei
14.05.2016
15:18:00
Да, я и сказал, это для людей, которые могут.

adam
14.05.2016
18:43:23
...

Ned Ogl
14.05.2016
22:19:37
как реализовать stl::vector с доступом к элементу за O(1)?

Google
KrivdaTheTriewe
14.05.2016
22:31:12
Хэштаблица

Anatoly
14.05.2016
22:41:59
Хэштаблица
Зачем? Массива ж достаточно.

Ned Ogl
14.05.2016
22:45:25
Зачем? Массива ж достаточно.
Хочу сделать массив, короче. Такой, чтобы длина была равна кол-ву эл-тов в нём. И был произвольный доступ.

В случае с двусвязкой, доступ дорогой

Нужен произвольный за 0(1)

Anatoly
14.05.2016
22:45:59
Эээ... ну массив же!

Ned Ogl
14.05.2016
22:46:25
Ну дык нужна динамичность

Я ж не могу его взять и рандомно удлинить...

Anatoly
14.05.2016
22:46:44
Ну так динамический массив!

Ned Ogl
14.05.2016
22:47:01
Дык он сразу длину приобретает... как это обойти?

Anatoly
14.05.2016
22:47:10
malloc, realloc?

Ned Ogl
14.05.2016
22:47:10
Изначально она должна быть нулевой

Кхэммм. ..

Google
Ned Ogl
14.05.2016
22:47:27
А реаллок не потрёт всё что было?

Anatoly
14.05.2016
22:47:58
При необходимости перевыделяй память, увеличивая капасити в 2 раза.

Реаллок не потрёт.

Ned Ogl
14.05.2016
22:48:30
А каков аналог реаллоку в С++?

Anatoly
14.05.2016
22:48:51
Но тут надо определиться, нужна ли работа только с простыми типами, или ещё и с объектами

Ned Ogl
14.05.2016
22:48:51
Или #include <cstdlib> ??

Сергей
14.05.2016
22:49:06
суть вектора в том, что при добоавлении он выделяет новую память и переносит данные

Anatoly
14.05.2016
22:49:21
Слу, а как насчёт посмотреть реализацию std::vector?

Ned Ogl
14.05.2016
22:49:41
Но тут надо определиться, нужна ли работа только с простыми типами, или ещё и с объектами
Я умею в маллок под объекты... как правило добавляю объектам свой sizeof

Anatoly
14.05.2016
22:49:56
Ned Ogl
14.05.2016
22:50:08
Лан, спасибо

Anatoly
14.05.2016
22:50:20
Чегойта "долго"?

Ned Ogl
14.05.2016
22:50:36
Нулол, быстрей по двусвязке бегать

Anatoly
14.05.2016
22:50:42
Удваивать размер массива надо log (n) раз

Ned Ogl
14.05.2016
22:50:58
Сергей
14.05.2016
22:51:06
вот ведь авторы Stl глупцы

Ned Ogl
14.05.2016
22:51:23
Я всю жизнь удваиваю в два раза

Наверное что-то со мной не так?

Anatoly
14.05.2016
22:52:09
вот ведь авторы Stl глупцы
Не, ну они, конечно, умудрились налажать с автопоинтером, но вообще да.

Google
Anatoly
14.05.2016
22:53:02
Я всю жизнь удваиваю в два раза
Наверное тебе стоит ещё раз прочитать тот коммент.

Ned Ogl
14.05.2016
22:53:49
Блин, нипанятна

Вроде понятно, а вроде и нет

Кстати, как пишут set?

Anatoly
14.05.2016
22:55:39
Чего непанятна-то? Если выделено памяти на 64 элемента, а нам нужен 65-ый, то выделяем память на 128, копируем 64 в новое место, и не чешемся, пока не будет нужно 129 элементов.

А потом 257. И 513. И 1025.

Anatoly
14.05.2016
22:56:31
Почти как хешмеп, только одни keys, без values.

А нах копировать?
У обьектов могут быть нетривиальные кишки.

Указатели на свои члены, и т.д.

Ned Ogl
14.05.2016
23:01:00
Тык зачем их тогда трогать?

Лежат же на месте

Anatoly
14.05.2016
23:01:46
На старом месте. А на старом месте может не оказаться блока памяти подходящего размера.

И ваще

http://codereview.stackexchange.com/questions/60484/stl-vector-implementation

http://stackoverflow.com/questions/2096571/how-is-c-stdvector-implemented

И т.д.

Anatoly
14.05.2016
23:08:57
Не получится. И? Твой вариант?

Andrey
14.05.2016
23:09:31
Не получится. И? Твой вариант?
Выделять не в 2 раза больше памяти, а в 1,5. Например.

Google
Anatoly
14.05.2016
23:10:58
Это не важно. Тупо performance/memory tradeoff.

Вот почему 1.5, а не 1.267?

Admin
ERROR: S client not available

Andrey
14.05.2016
23:11:57
Вот почему 1.5, а не 1.267?
Константа от балды выбрана.

Anatoly
14.05.2016
23:12:30
"Это не важно" (с) я

Andrey
14.05.2016
23:13:10
На логику это не влияет, но переиспользование памяти всё-таки надо делать.

Идеальным порогом будет 1/2 + sqrt(5) / 2

Хотя нет, вру.

А, нет. Не вру.

Anatoly
14.05.2016
23:16:10
Идеальным? Какую функцию должен минимизировать сей икс?

Чуть не забыл: в самом начале надо выделять не 1-2-4 элемента, а, скажем, сразу 8-16

Andrey
14.05.2016
23:17:44
Идеальным? Какую функцию должен минимизировать сей икс?
Это порог, когда переиспользование памяти возможено.

Anatoly
14.05.2016
23:18:00
Лолшто?

Переиспользование возможно всегда.

Andrey
14.05.2016
23:18:42
Переиспользование возможно всегда.
С константой 2 ты не сможешь переиспользовать память.

Anatoly
14.05.2016
23:19:03
С чегойта? Я хоть с константой 100 смогу.

Andrey
14.05.2016
23:19:15
Если мы будем рассматривать только массив внутри памяти.

+ память фрагментироваться не будет.

Тоже в рамках одного массива.

Anatoly
14.05.2016
23:19:59
Google
Andrey
14.05.2016
23:20:21
А где ж ещё, в космосе что ли?
Ок, как ты будешь переиспользовать память с константой 100?

Anatoly
14.05.2016
23:20:31
Так же как и с 2.

Новую память выделил, скопировал данные, старую освободил. Подходи, бери кому сколько надо.

Andrey
14.05.2016
23:21:08
1+2+...(2n - 2) < 2n

Anatoly
14.05.2016
23:21:25
Что это?

Andrey
14.05.2016
23:21:41
Херню написал.

Anatoly
14.05.2016
23:21:57
Да я вижу. Зачем ты её написал?

Andrey
14.05.2016
23:22:00
1 + 2 + 4 + 2^(n - 1) < 2^n

Так верно.

Anatoly
14.05.2016
23:22:24
Теперь верно. И?

Andrey
14.05.2016
23:22:57
У тебя на каждом шаге уже использованная память будет больше, чем тебе надо. Поэтому не сможешь переиспользовать.

С константой > 1/2 + sqrt(5) / 2, конечно же.

Страница 171 из 2477