Russian Qt Forum
Ноябрь 24, 2024, 02:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
как правильней писать указатель?
Страниц:
1
2
3
[
4
]
5
6
7
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: как правильней писать указатель? (Прочитано 42145 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как правильней писать указатель?
«
Ответ #45 :
Февраль 16, 2011, 19:08 »
Цитата: Anchorite от Февраль 16, 2011, 18:28
У std::vector есть конструктор, создающий вектор заданного размера все элементы которого инициализированны заданным значением.
Не вставляй и не удаляй в него элементы.
Если необходимо получить из этого вектора массив - берешь адрес нулевого элемента.
Молодые (но уже борзые) щенки обычно в таких случаях отвечают типа "А ты пост читал???"
Я попробую пояснить еще раз.
Что делает стандартный вектор - я знаю. На "быстрое" удаление/вставку не претендую. Хочу просто чтобы контейнер "рос" по-умному. То что Вы описали правильно, но так мы недалеко ушли от С массива. Интерес добавлять новые элементы (в хвост) не заботясь о том "как это реализовано". (Q)Вектор это делает, но плохо:
- push_back (N раз). В какой-то момент пул вектора закончился, надо пере-распределиться. Было 500 Mb данных - стало 750 (а я этого не просил). Хуже того - все элементы копируются их старых 500 в новые 750.
Понятно что какая-то избыточность (пул) всегда неизбежны. Но почему нельзя сделать это по уму? Например - надо выделить память под следующий элемент а резерва уже нет. Ну выделил память для следующего блока элементов (не дергая уже имеющиеся) и не вычисляя новый размер "от фонаря"
Thoughts?
Записан
BRE
Гость
Re: как правильней писать указатель?
«
Ответ #46 :
Февраль 16, 2011, 19:28 »
Цитата: Igors от Февраль 16, 2011, 19:08
Понятно что какая-то избыточность (пул) всегда неизбежны. Но почему нельзя сделать это по уму? Например - надо выделить память под следующий элемент а резерва уже нет. Ну выделил память для следующего блока элементов (не дергая уже имеющиеся) и не вычисляя новый размер "от фонаря"
Почему vector
вынужден
дергать имеющиеся элементы вроде не раз обсуждали. Это его минус, но у него есть и свои плюсы.
Можно посмотреть на std::deque.
Ну и недавно я уже писал про поиски идеального контейнера... нет таких! У каждого из них есть как свои плюсы, так и свои минусы. Поэтому приходиться все время выбирать какой контейнер в этом месте будет эффективней относительно его +/-.
А в некоторых случаях писать свою реализацию контейнера и/или аллокатора.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: как правильней писать указатель?
«
Ответ #47 :
Февраль 16, 2011, 19:41 »
Цитировать
Ну выделил память для следующего блока элементов (не дергая уже имеющиеся) и не вычисляя новый размер "от фонаря"
По стандарту, элементы в std::vector располагаются последовательно в памяти. Это переходное звено между си и с++. То, что ты хочешь, входит в противоречие со стандартом. Объемом памяти можешь управлять при помощи reserve или своего аллокатора. Вообще, ты уже переходишь с этой темой на уровень флуда.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как правильней писать указатель?
«
Ответ #48 :
Февраль 16, 2011, 19:42 »
Цитата: BRE от Февраль 16, 2011, 19:28
Ну и недавно я уже писал про поиски идеального контейнера... нет таких! У каждого из них есть как свои плюсы, так и свои минусы. Поэтому приходиться все время выбирать какой контейнер в этом месте будет эффективней относительно его +/-.
А в некоторых случаях писать свою реализацию контейнера и/или аллокатора.
Тот аллокатор напоминает мне старую песню с Extended/Expanded memory (если помните)
Конечно я давно сделал свой контейнер который растет порциями, но, блин, обидно что такой реально необходимой вещи нет стандартной (заметим - исключительно для совместимости с С)
Записан
BRE
Гость
Re: как правильней писать указатель?
«
Ответ #49 :
Февраль 16, 2011, 19:44 »
Цитата: Igors от Февраль 16, 2011, 19:42
Конечно я давно сделал свой контейнер который растет порциями, но, блин, обидно что такой реально необходимой вещи нет стандартной (заметим - исключительно для совместимости с С)
Ну так опубликуй.
Весь мир ждет этот идеальный контейнер. Уверен, что уже в ближайшее время он попадет в boost, ну а потом и в стандарт.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: как правильней писать указатель?
«
Ответ #50 :
Февраль 16, 2011, 19:45 »
Надо в stl пропихнуть std::vector++
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как правильней писать указатель?
«
Ответ #51 :
Февраль 16, 2011, 19:59 »
Цитата: BRE от Февраль 16, 2011, 19:44
Ну так опубликуй.
Весь мир ждет этот идеальный контейнер. Уверен, что уже в ближайшее время он попадет в boost, ну а потом и в стандарт.
Цитата: Пантер от Февраль 16, 2011, 19:45
Надо в stl пропихнуть std::vector++
Ладно, какой вопрос(ы) - такой и ответ(ы).
Ведь реализация блоками (по-ихнему "chunks") очевидна (если Вы конечно программисты а не только списывете чужие классы). Это известно задолго до STL и (мое мнение) - западло что в STL этого нет.
Записан
BRE
Гость
Re: как правильней писать указатель?
«
Ответ #52 :
Февраль 16, 2011, 20:06 »
Цитата: Igors от Февраль 16, 2011, 19:59
Ведь реализация блоками (по-ихнему "chunks") очевидна (если Вы конечно программисты а не только списывете чужие классы). Это известно задолго до STL и (мое мнение) - западло что в STL этого нет.
Ну есть же деки.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как правильней писать указатель?
«
Ответ #53 :
Февраль 16, 2011, 20:31 »
Цитата: BRE от Февраль 16, 2011, 20:06
Ну есть же деки.
Ну сравнили палец с др. частью тела. Не хочу и обсуждать
Записан
BRE
Гость
Re: как правильней писать указатель?
«
Ответ #54 :
Февраль 16, 2011, 20:35 »
Цитата: Igors от Февраль 16, 2011, 20:31
Ну сравнили палец с др. частью тела. Не хочу и обсуждать
Странно как-то получается.
Из стандартного "все не то", даже обсуждать не хочешь (хотя я тоже не буду с тобой это обсуждать), свою "красоту" тоже не показываешь. В простонародье это называется просто Тролллллинг. Не?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как правильней писать указатель?
«
Ответ #55 :
Февраль 16, 2011, 20:57 »
Цитата: BRE от Февраль 16, 2011, 20:35
Странно как-то получается.
Из стандартного "все не то", даже обсуждать не хочешь (хотя я тоже не буду с тобой это обсуждать), свою "красоту" тоже не показываешь. В простонародье это называется просто Тролллллинг. Не?
Нет. Чего я буду со своей "красотой" налезать? Она ведь не от хорошей жизни а потому что "реально надо". С удовольствием бы попользовался чем-то стандартным. Так ведь нету. Хочу обсудить на форуме - дают советы типа "я ни разу не грамотный"
Библия, Коран, Assistant и др. - все они великие книги, я согласен. Но всегда с тем развивается преследование/травля инакомыслящих. Ладно, я это переживу
Записан
brankovic
Гость
Re: как правильней писать указатель?
«
Ответ #56 :
Февраль 16, 2011, 21:05 »
Цитата: Igors от Февраль 16, 2011, 20:57
С удовольствием бы попользовался чем-то стандартным.
Ну вы нам расскажите, чем дека-то не устраивает, а то мне вот тоже кажется, что она под ваши требования подходит.
Записан
BRE
Гость
Re: как правильней писать указатель?
«
Ответ #57 :
Февраль 16, 2011, 21:10 »
Цитата: Igors от Февраль 16, 2011, 20:57
Нет. Чего я буду со своей "красотой" налезать? Она ведь не от хорошей жизни а потому что "реально надо". С удовольствием бы попользовался чем-то стандартным. Так ведь нету. Хочу обсудить на форуме - дают советы типа "я ни разу не грамотный"
Библия, Коран, Assistant и др. - все они великие книги, я согласен. Но всегда с тем развивается преследование/травля инакомыслящих. Ладно, я это переживу
Каких инакомыслящих? Ты это о ком? Если о себе, то пока ты еще ничего не рассказал/показал. Так, одни намеки.
Я тебе серьезно предложил, покажи что у тебя есть, может оно действительно лучше всего что есть на сегодняшний момент.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как правильней писать указатель?
«
Ответ #58 :
Февраль 16, 2011, 22:10 »
Цитата: BRE от Февраль 16, 2011, 21:10
Я тебе серьезно предложил, покажи что у тебя есть, может оно действительно лучше всего что есть на сегодняшний момент.
И в чем же Ваша "серьезность"? Вы продадите код и мы с Вами озолотимся?
Хорошо если так, но что-то не очень верится (хотя дай бог). Ладно, вот реальный хедер в аттаче (не правил ни буквы). Конечно он труден для понимания - просто он делался не для продажи/красоты а потому что стандарт никак не устраивает.
И не надо "ловить меня на слове" - я за свои слова отвечаю
Записан
BRE
Гость
Re: как правильней писать указатель?
«
Ответ #59 :
Февраль 16, 2011, 22:34 »
Цитата: Igors от Февраль 16, 2011, 22:10
И в чем же Ваша "серьезность"? Вы продадите код и мы с Вами озолотимся?
Хорошо если так, но что-то не очень верится (хотя дай бог).
+1
Цитата: Igors от Февраль 16, 2011, 22:10
Ладно, вот реальный хедер в аттаче (не правил ни буквы).
А чем твой контейнер отличается от дека, не считая ограниченного функционала?
Кстати,
Код
C++ (Qt)
#define TCOUNT_IN_CHUNK (TCHUNK_SIZE / sizeof(T))
а если размер чанка окажется не кратен размеру элемента, в конце каждого чанка будет болтаться неиспользуемый кусок памяти?
Лучше размер чанка расчитывать от размера элемента.
Записан
Страниц:
1
2
3
[
4
]
5
6
7
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...