![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Авварон |
![]()
Сообщение
#41
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
То есть тест вы так и не скачали и не посмотрели?
![]() Да, какие еще ограничения добавите? ![]() upd: прогнал и этот тест. Чуть лучше для std - std::vector и QVector равны по всем параметрам; QList чуть медленнее аппендит, гораздо быстрее препендит и рандомная вставка у Кулиста чуть лучше. Не вижу, почему вы считаете использование QString'а в тесте "несостоятельным" - контейнеры, содержащие строки достаточно распространены, не использовать же на каждый чих контейнеры с указателями на строки? Сообщение отредактировал Авварон - 15.2.2013, 19:05 |
|
|
Алексей1153 |
![]()
Сообщение
#42
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
почему вы считаете использование QString'а в тесте "несостоятельным" где я такое писал ? а разница в том, что указатель - простой тип - будет копироваться в векторе тем самым memmove (сразу вся перемещаемая часть указателей то есть). А QString - оператором =. И фиг с ним, с QString , я его всегда с удовольствием применяю даже в stl-контейнерах. Самое неприятное, когда элемент содержит указатели на динамические объекты - и возня с копированием ичень достаёт. Проще просто указатели в векторе/мапе и хранить |
|
|
Авварон |
![]()
Сообщение
#43
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
В том-то и вся фишка, что для QString не используется operator=, отсюда и разница в производительности в 10раз. Из-за шаред даты внутри QString QList/QVector используют memmove для ЛЮБЫХ типов Qt, основанных на COW (так как они являются перемещаемыми). Более того, вы можете применять эту оптимизацию это для своих типов при помощи макроса Q_DECLARE_TYPEINFO.
|
|
|
Алексей1153 |
![]()
Сообщение
#44
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Авварон |
![]()
Сообщение
#45
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
Всё дело в том, что у QString'а в хедере есть следующий код:
благодаря которому QVector/QList "узнают" о том, что QString можно является movable и его можно перемещать меммувом. На всякий случай приведу код, его должно быть достаточно для понимания, как оно работает: Раскрывающийся текст
Вы легко можете проверить сами, является ли тип статичным (то есть то, что он НЕ примитивен и НЕ мувабл):
|
|
|
__ilya__ |
![]()
Сообщение
#46
|
Студент ![]() Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
![]() ![]() в общем два вектора соеденяются так:
Правильно? |
|
|
Алексей1153 |
![]()
Сообщение
#47
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Авварон, ну QString, по сути, и есть один указатель, так что различия с вектором нет, если там применять указатели так же. В MFC раньше похоже был устроен CString , но потом его зашаблонили ))
__ilya__, так попробуй и всё, это же быстрее ) |
|
|
Авварон |
![]()
Сообщение
#48
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#49
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Авварон |
![]()
Сообщение
#50
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 12:05 |