Смотреть профилировщиком в каждом конкретном случае, поскольку контейнеры одинаковые по сути реализованы везде почти одинаково с мелкими нюансами, типа размеров по умолчанию, которые могут сделать и лучше хуже в зависимости от сценария использования.
Знаю, что в Qt и в STL разные рекомендации по выбору контейнеров. В STL рекомендуют использовать std::vector, в Qt - QList.
Нужно сперва сформулировать требования к контейнеру (скорость выборки, добавления элемента, удаления элемента, расположение элементов контейнера в памяти) и сопоставить их с имеющимися реализациями.
где-то на хабре читал мнение (правда, от сишника), что реализации vector-а STL медленные все, в принципе. мне нужно для POD, а там возможны оптимизации за счёт realloc. да и malloc с calloc на 5 копеек быстрее вызываются, чем new/delete.
В STL рекомендуют использовать std::vector, в Qt - QList.
На всякий случай, QList - это не аналог std::list, как можно подумать по названию. Вот тут есть информация, ну или в самой документации Ят. Уверен, что для простых типов std::vector выиграет.
где-то на хабре читал мнение (правда, от сишника), что реализации vector-а STL медленные все, в принципе. мне нужно для POD, а там возможны оптимизации за счёт realloc. да и malloc с calloc на 5 копеек быстрее вызываются, чем new/delete.
Выкатывай юзкейс - пиши бенч. С меня так уж и быть эталонная и самая быстрая реализация. Сравним.
Компилятор обычно в состоянии оптимизировать лишние копирования при возврате контейнера из функции, а для всего остального есть смарт-поинтеры, Rvalue-ссылки и std::move
Не такая и однозначная штука. Дополнительный оверхед всегда, а плюсы этой фигни требуются не каждый раз. А когда требуются, то (в 99%) случаев, можно другими средствами обойтись.
Странно сравнивать две концепции, преследующие различные цели. CoW расшаривает ресурс между несколькими объектами до момента изменения, тогда как move-semantics предполагает единоличное владение в конкретный момент времени, что полезно для многопоточного кода.
В свое время implicit data sharing был добавлен в Qt исключительно для оптимизации копирования. В C++11 это неактуально, причем без потери удобства в сравнении с Qt-контейнерами
Я вполне представляю себе как работают контейнеры в Qt, какие у них преимущества и недостатки. Ты торопишься с выводами о собеседниках. К слову, топик 2009-го года
От тебя не увидел ни одной. Безусловно, у всех контейнеров есть преимущества и недостатки. Тот же std::list::splice очень интересен. Но как я уже заметил, у меня не было выводов о собеседниках, поэтому ты несёшь ахинею.
У тебя папа что ли в Digia работает? Как-то ты болезненно на Qt'шные темы реагируешь. Я лишь заметил, что CoW в Qt неактуален сегодня - в контексте C++11