Russian Qt Forum
Ноябрь 24, 2024, 02:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4] 5 6 7   Вниз
  Печать  
Автор Тема: как правильней писать указатель?  (Прочитано 42162 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #45 : Февраль 16, 2011, 19:08 »

У std::vector есть конструктор, создающий вектор заданного размера все элементы которого инициализированны заданным значением.
Не вставляй и не удаляй в него элементы.
Если необходимо получить из этого вектора массив - берешь адрес нулевого элемента.
Молодые (но уже борзые) щенки обычно в таких случаях отвечают типа "А ты пост читал???"  Улыбающийся
Я попробую пояснить еще раз.

Что делает стандартный вектор - я знаю. На "быстрое" удаление/вставку не претендую. Хочу просто чтобы контейнер "рос" по-умному. То что Вы описали правильно, но так мы недалеко ушли от С массива. Интерес добавлять новые элементы (в хвост) не заботясь о том "как это реализовано". (Q)Вектор это делает, но плохо:

- push_back (N раз). В какой-то момент пул вектора закончился, надо пере-распределиться. Было 500 Mb данных - стало 750 (а я этого не просил). Хуже того - все элементы копируются их старых 500 в новые 750.

Понятно что какая-то избыточность (пул) всегда неизбежны. Но почему нельзя сделать это по уму? Например - надо выделить память под следующий элемент а резерва уже нет. Ну выделил память для следующего блока элементов (не дергая уже имеющиеся) и не вычисляя новый размер "от фонаря"

Thoughts?

Записан
BRE
Гость
« Ответ #46 : Февраль 16, 2011, 19:28 »

Понятно что какая-то избыточность (пул) всегда неизбежны. Но почему нельзя сделать это по уму? Например - надо выделить память под следующий элемент а резерва уже нет. Ну выделил память для следующего блока элементов (не дергая уже имеющиеся) и не вычисляя новый размер "от фонаря"
Почему vector вынужден дергать имеющиеся элементы вроде не раз обсуждали. Это его минус, но у него есть и свои плюсы.

Можно посмотреть на std::deque.

Ну и недавно я уже писал про поиски идеального контейнера... нет таких! У каждого из них есть как свои плюсы, так и свои минусы. Поэтому приходиться все время выбирать какой контейнер в этом месте будет эффективней относительно его +/-.
А в некоторых случаях писать свою реализацию контейнера и/или аллокатора.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #47 : Февраль 16, 2011, 19:41 »

Цитировать
Ну выделил память для следующего блока элементов (не дергая уже имеющиеся) и не вычисляя новый размер "от фонаря"
По стандарту, элементы в std::vector располагаются последовательно в памяти. Это переходное звено между си и с++. То, что ты хочешь, входит в противоречие со стандартом. Объемом памяти можешь управлять при помощи reserve или своего аллокатора. Вообще, ты уже переходишь с этой темой на уровень флуда.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #48 : Февраль 16, 2011, 19:42 »

Ну и недавно я уже писал про поиски идеального контейнера... нет таких! У каждого из них есть как свои плюсы, так и свои минусы. Поэтому приходиться все время выбирать какой контейнер в этом месте будет эффективней относительно его +/-.
А в некоторых случаях писать свою реализацию контейнера и/или аллокатора.
Тот аллокатор напоминает мне старую песню с Extended/Expanded memory (если помните)  Улыбающийся
Конечно я давно сделал свой контейнер который растет порциями, но, блин, обидно что такой реально необходимой вещи нет стандартной (заметим - исключительно для совместимости с С)
Записан
BRE
Гость
« Ответ #49 : Февраль 16, 2011, 19:44 »

Конечно я давно сделал свой контейнер который растет порциями, но, блин, обидно что такой реально необходимой вещи нет стандартной (заметим - исключительно для совместимости с С)
Ну так опубликуй.  Подмигивающий Весь мир ждет этот идеальный контейнер. Уверен, что уже в ближайшее время он попадет в boost, ну а потом и в стандарт.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #50 : Февраль 16, 2011, 19:45 »

Надо в stl пропихнуть std::vector++
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #51 : Февраль 16, 2011, 19:59 »

Ну так опубликуй.  Подмигивающий Весь мир ждет этот идеальный контейнер. Уверен, что уже в ближайшее время он попадет в boost, ну а потом и в стандарт.
Надо в stl пропихнуть std::vector++
Ладно, какой вопрос(ы) - такой и ответ(ы).

Ведь реализация блоками (по-ихнему "chunks") очевидна (если Вы конечно программисты а не только списывете чужие классы). Это известно задолго до STL и (мое мнение) - западло что в STL этого нет.
Записан
BRE
Гость
« Ответ #52 : Февраль 16, 2011, 20:06 »

Ведь реализация блоками (по-ихнему "chunks") очевидна (если Вы конечно программисты а не только списывете чужие классы). Это известно задолго до STL и (мое мнение) - западло что в STL этого нет.
Ну есть же деки.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #53 : Февраль 16, 2011, 20:31 »

Ну есть же деки.
Ну сравнили палец с др. частью тела. Не хочу и обсуждать
Записан
BRE
Гость
« Ответ #54 : Февраль 16, 2011, 20:35 »

Ну сравнили палец с др. частью тела. Не хочу и обсуждать
Странно как-то получается.
Из стандартного "все не то", даже обсуждать не хочешь (хотя я тоже не буду с тобой это обсуждать), свою "красоту" тоже не показываешь. В простонародье это называется просто Тролллллинг. Не?  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #55 : Февраль 16, 2011, 20:57 »

Странно как-то получается.
Из стандартного "все не то", даже обсуждать не хочешь (хотя я тоже не буду с тобой это обсуждать), свою "красоту" тоже не показываешь. В простонародье это называется просто Тролллллинг. Не?  Улыбающийся
Нет. Чего я буду со своей "красотой" налезать? Она ведь не от хорошей жизни а потому что "реально надо". С удовольствием бы попользовался чем-то стандартным. Так ведь нету. Хочу обсудить на форуме - дают советы типа "я ни разу не грамотный"  Улыбающийся

Библия, Коран, Assistant  и др. - все они великие книги, я согласен. Но всегда с тем развивается преследование/травля инакомыслящих. Ладно, я это переживу  Улыбающийся
Записан
brankovic
Гость
« Ответ #56 : Февраль 16, 2011, 21:05 »

С удовольствием бы попользовался чем-то стандартным.

Ну вы нам расскажите, чем дека-то не устраивает, а то мне вот тоже кажется, что она под ваши требования подходит.
Записан
BRE
Гость
« Ответ #57 : Февраль 16, 2011, 21:10 »

Нет. Чего я буду со своей "красотой" налезать? Она ведь не от хорошей жизни а потому что "реально надо". С удовольствием бы попользовался чем-то стандартным. Так ведь нету. Хочу обсудить на форуме - дают советы типа "я ни разу не грамотный"  Улыбающийся

Библия, Коран, Assistant  и др. - все они великие книги, я согласен. Но всегда с тем развивается преследование/травля инакомыслящих. Ладно, я это переживу  Улыбающийся
Каких инакомыслящих? Ты это о ком? Если о себе, то пока ты еще ничего не рассказал/показал. Так, одни намеки.
Я тебе серьезно предложил, покажи что у тебя есть, может оно действительно лучше всего что есть на сегодняшний момент.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #58 : Февраль 16, 2011, 22:10 »

Я тебе серьезно предложил, покажи что у тебя есть, может оно действительно лучше всего что есть на сегодняшний момент.
И в чем же Ваша "серьезность"? Вы продадите код и мы с Вами озолотимся?  Улыбающийся Хорошо если так, но что-то не очень верится (хотя дай бог). Ладно, вот реальный хедер в аттаче (не правил ни буквы). Конечно он труден для понимания - просто он делался не для продажи/красоты а потому что стандарт никак не устраивает.

И не надо "ловить меня на слове" - я за свои слова отвечаю  Улыбающийся
Записан
BRE
Гость
« Ответ #59 : Февраль 16, 2011, 22:34 »

И в чем же Ваша "серьезность"? Вы продадите код и мы с Вами озолотимся?  Улыбающийся Хорошо если так, но что-то не очень верится (хотя дай бог).
+1

Ладно, вот реальный хедер в аттаче (не правил ни буквы).
А чем твой контейнер отличается от дека, не считая ограниченного функционала?

Кстати,
Код
C++ (Qt)
#define TCOUNT_IN_CHUNK (TCHUNK_SIZE / sizeof(T))
 
а если размер чанка окажется не кратен размеру элемента, в конце каждого чанка будет болтаться неиспользуемый кусок памяти?
Лучше размер чанка расчитывать от размера элемента.
Записан
Страниц: 1 2 3 [4] 5 6 7   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 24.