LINUX.ORG.RU

Смотреть профилировщиком в каждом конкретном случае, поскольку контейнеры одинаковые по сути реализованы везде почти одинаково с мелкими нюансами, типа размеров по умолчанию, которые могут сделать и лучше хуже в зависимости от сценария использования.

GPFault ★★
()

Ещё какая-либо библиотка?

folly, например

fluorite ★★★★★
()

Знаю, что в Qt и в STL разные рекомендации по выбору контейнеров. В STL рекомендуют использовать std::vector, в Qt - QList.

Нужно сперва сформулировать требования к контейнеру (скорость выборки, добавления элемента, удаления элемента, расположение элементов контейнера в памяти) и сопоставить их с имеющимися реализациями.

Evil_And ★★
()

Ты бы лучше конкретную задачу описал, а тебе скажут, какой контейнер надо заюзать.

panter_dsd ★★★★
()
Последнее исправление: panter_dsd (всего исправлений: 1)

Нас сколько помню, Qt это CoW контейнеры. Boost, чаще всего, повторяет STL, собссно все, то в буст - это, в большинстве, кандидаты в стандарт.

А еще реализации...есть eastl, например http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

anonymous
()

везде хреновые, пиши свои

anonymous
()
Ответ на: комментарий от Solace

где-то на хабре читал мнение (правда, от сишника), что реализации vector-а STL медленные все, в принципе. мне нужно для POD, а там возможны оптимизации за счёт realloc. да и malloc с calloc на 5 копеек быстрее вызываются, чем new/delete.

next_time ★★★★★
() автор топика
Ответ на: комментарий от Evil_And

В STL рекомендуют использовать std::vector, в Qt - QList.

На всякий случай, QList - это не аналог std::list, как можно подумать по названию. Вот тут есть информация, ну или в самой документации Ят. Уверен, что для простых типов std::vector выиграет.

DarkEld3r ★★★★★
()

Странный какой-то вопрос. Пиши на том что есть, если будет не хватать - тогда и подумаешь.

no-such-file ★★★★★
()
Ответ на: комментарий от next_time

что реализации vector-а STL медленные все,

угу. Они все копируют поэлементно, что для POD не нужно в 95% случаев.

anonymous
()
Ответ на: комментарий от next_time

где-то на хабре читал мнение (правда, от сишника), что реализации vector-а STL медленные все, в принципе. мне нужно для POD, а там возможны оптимизации за счёт realloc. да и malloc с calloc на 5 копеек быстрее вызываются, чем new/delete.

Выкатывай юзкейс - пиши бенч. С меня так уж и быть эталонная и самая быстрая реализация. Сравним.

anonymous
()
Ответ на: комментарий от GPFault

поскольку контейнеры одинаковые по сути реализованы везде почти

Ололо. С implicit data sharing в Qt, ваш stl отсасывает в полёте..

UVV ★★★★★
()
Ответ на: комментарий от anonymous

спорно.

Компилятор обычно в состоянии оптимизировать лишние копирования при возврате контейнера из функции, а для всего остального есть смарт-поинтеры, Rvalue-ссылки и std::move

anonymous
()
Ответ на: комментарий от UVV

С implicit data sharing в Qt,

Не такая и однозначная штука. Дополнительный оверхед всегда, а плюсы этой фигни требуются не каждый раз. А когда требуются, то (в 99%) случаев, можно другими средствами обойтись.

ваш stl отсасывает в полёте..

Тупо.

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Дополнительный оверхед всегда,

Дополнительный оверхед, это когде нужно пользоваться костылями. Пользоваться Qt контейнерами просто удобнее.

ваш stl отсасывает в полёте.. Тупо.

Я так и сказал, тупо отсасывает.

UVV ★★★★★
()
Ответ на: комментарий от anonymous

Пора вырастать из Qt-штанишек, дружок

В скобочки лиспа? Проверь, ты домашку сделал на сегодня?

UVV ★★★★★
()
Ответ на: комментарий от anonymous

Странно сравнивать две концепции, преследующие различные цели. CoW расшаривает ресурс между несколькими объектами до момента изменения, тогда как move-semantics предполагает единоличное владение в конкретный момент времени, что полезно для многопоточного кода.

Shadow1251
()
Ответ на: комментарий от UVV

Ты неадекватен.

И что не нравится в твоей ссылке?

DarkEld3r ★★★★★
()
Ответ на: комментарий от Shadow1251

В свое время implicit data sharing был добавлен в Qt исключительно для оптимизации копирования. В C++11 это неактуально, причем без потери удобства в сравнении с Qt-контейнерами

anonymous
()
Ответ на: комментарий от UVV

Я вполне представляю себе как работают контейнеры в Qt, какие у них преимущества и недостатки. Ты торопишься с выводами о собеседниках. К слову, топик 2009-го года

anonymous
()
Ответ на: комментарий от anonymous

От тебя не увидел ни одной. Безусловно, у всех контейнеров есть преимущества и недостатки. Тот же std::list::splice очень интересен.
Но как я уже заметил, у меня не было выводов о собеседниках, поэтому ты несёшь ахинею.

UVV ★★★★★
()
Ответ на: комментарий от UVV

У тебя папа что ли в Digia работает? Как-то ты болезненно на Qt'шные темы реагируешь. Я лишь заметил, что CoW в Qt неактуален сегодня - в контексте C++11

anonymous
()
Ответ на: комментарий от anonymous

выше по треду мне уже поставили диагноз.. =)

UVV ★★★★★
()
Ответ на: комментарий от anonymous

CoW в Qt неактуален сегодня - в контексте C++11

Чем тут поможет С++11?

QByteArray ba = source;
if(encoded) decode( ba );

Если условие не выполнилось - никакого копирования и нового выделения буфера ес-но быть не должно. Аналогично со списками, строками и пр.

anonymous
()
Ответ на: комментарий от UVV

И каким боком тут list? или ты тоже думаешь, что QList это тоже самое, что std::list?

anonymous
()
Ответ на: комментарий от anonymous

В Qtовских можно пометить, что тип POD и он будет копироваться через memcpy.

Gorthauer ★★★★★
()

используй vector из stl и оставь этот вопрос на будущее иначе у тебя прематур оптимизация такс сказать.

qulinxao ★★☆
()

где контейнерные классы (vector,list, set, и пр.) лучше оптимизированы

у тебя, под твою задачу.

(да, я понимаю, что в 95% так делать не нужно)

emulek
()
Ответ на: комментарий от anonymous

CoW не нужен

ты-бы залогинился, я-бы тебе в коммент это вписал.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.