Форум программистов, компьютерный форум CyberForum.ru

QVector::reserve() + std::vector::reserve() и добавление в начало - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
24.08.2013, 23:09     QVector::reserve() + std::vector::reserve() и добавление в начало #1
Если зарезервировать в новосозданном векторе место, а затем добавлять объекты классов в начало - будет ли эффективнее вставка? Или предварительная резервация эффективна только для push_back() ?

Прошу ответить и о QVector и о std::vector.
спасибо!

Ps. Думаю, в std::vector вставка в начало по своей природе неэффективна, но может в QVector тролли что-то мутнули
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 00:03     QVector::reserve() + std::vector::reserve() и добавление в начало #2
А зачем вставлять именно в начало? Объекты все равно должны будут сдвигаться. std::deque тогда лучше использовать
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 00:05     QVector::reserve() + std::vector::reserve() и добавление в начало #3
std::vector от компилятора к компилятору реализован немного по-разному. Почему бы тебе не состряпать benchmark и посмотреть?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2013, 00:16     QVector::reserve() + std::vector::reserve() и добавление в начало #4
Цитата Сообщение от gromo Посмотреть сообщение
будет ли эффективнее вставка
В std::vector будет, в кьюте тоже должна быть эффективнее
Но лучше возьмите дек
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.08.2013, 00:29  [ТС]     QVector::reserve() + std::vector::reserve() и добавление в начало #5
Цитата Сообщение от Nekto Посмотреть сообщение
А зачем вставлять именно в начало? Объекты все равно должны будут сдвигаться.
Можно, конечно, в конец, но неудобно потом будет с реверсивными итераторами и т.д.
Цитата Сообщение от castaway Посмотреть сообщение
std::vector от компилятора к компилятору реализован немного по-разному. Почему бы тебе не состряпать benchmark и посмотреть?
Я использую Qt, поэтому вряд ли хорошо будет смешивать std:: и Qt контейнеры (или все-таки не так страшно? ). А за идею замерить спасибо, обязательно попробую.

Nekto, я и забыл за очередь. Спасибо.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 00:33     QVector::reserve() + std::vector::reserve() и добавление в начало #6
Цитата Сообщение от gromo Посмотреть сообщение
Я использую Qt, поэтому вряд ли хорошо будет смешивать std:: и Qt контейнеры (или все-таки не так страшно? ).
Qt это не язык, нельзя сказать что это плохо смешивать. Тут главное зависит от того что ты хочешь реализовать.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
25.08.2013, 00:50     QVector::reserve() + std::vector::reserve() и добавление в начало #7
Цитата Сообщение от diagon Посмотреть сообщение
В std::vector будет, в кьюте тоже должна быть эффективнее
Но лучше возьмите дек
Это когда это вставка в начало в векторе была эффектива ?

Добавлено через 1 минуту
Цитата Сообщение от gromo Посмотреть сообщение
Можно, конечно, в конец, но неудобно потом будет с реверсивными итераторами и т.д.
А что именно неудобно ?
По моему их и делали для того что бы было удобно.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.08.2013, 00:50  [ТС]     QVector::reserve() + std::vector::reserve() и добавление в начало #8
Цитата Сообщение от castaway Посмотреть сообщение
Тут главное зависит от того что ты хочешь реализовать.
Вообще-то я вставляю символы в QString Я заодно хотел узнать и о контейнерах вообще.
Так имеет смысл делать reserve() В QString, при вставке в начало? Вставляться будет максимум до 50 символов, в среднем - около 20. Следует ли извращаться с оптимизацией? [Здесь цитата Д.Кнута]

Цитата Сообщение от Avazart Посмотреть сообщение
А что именно неудобно ?
То что я вставляю символы в QString
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
25.08.2013, 00:55     QVector::reserve() + std::vector::reserve() и добавление в начало #9
Ну так может посмотреть в реализацию QString и не гадать ?
Или попробовать и сравнить результат ...
Jupiter
25.08.2013, 00:56
  #10

Не по теме:

Цитата Сообщение от gromo Посмотреть сообщение
Вообще-то я вставляю символы в QString
ваше дело труба

Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.08.2013, 00:57     QVector::reserve() + std::vector::reserve() и добавление в начало #11
вставка в начало вектора всегда неэффективна. для таких целей существует deque
Цитата Сообщение от gromo Посмотреть сообщение
QString
в таком случае можно вставлять в конец и потом реверсить*
реверсить когда нужно использовать данные, хотя я не знаю что вы там пишите. может быть можно и без этого
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2013, 00:58     QVector::reserve() + std::vector::reserve() и добавление в начало #12
Цитата Сообщение от Avazart Посмотреть сообщение
эффектива
Не эффективна, а эффективнее, так как не будет реаллокейтов.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
25.08.2013, 00:58     QVector::reserve() + std::vector::reserve() и добавление в начало #13
Цитата Сообщение от Jupiter Посмотреть сообщение
ваше дело труба
Ну да тут идея не понятна и ее конечная цель.

gromo, Это что типа QString как буфер использовать или чЁ?
При чем тут вектор ?
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.08.2013, 00:59  [ТС]     QVector::reserve() + std::vector::reserve() и добавление в начало #14
Цитата Сообщение от Jupiter Посмотреть сообщение
ваше дело труба
Это чего же так?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2013, 01:00     QVector::reserve() + std::vector::reserve() и добавление в начало #15
Цитата Сообщение от gromo Посмотреть сообщение
Это чего же так?
Цитата Сообщение от Avazart Посмотреть сообщение
идея не понятна и ее конечная цель.
...
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.08.2013, 01:05  [ТС]     QVector::reserve() + std::vector::reserve() и добавление в начало #16
Цитата Сообщение от Avazart Посмотреть сообщение
Это что типа QString как буфер использовать или чЁ?
нет, я вставляю цифры в виде QChar ('1') в начало строки. Так нужно, потому что это результат перевода дробной части числа в определенную систему счисления. Результирующий QString выводится в QLineEdit.
Цитата Сообщение от Avazart Посмотреть сообщение
При чем тут вектор ?
Ну это я так, по аналогии хотел заодно узнать и о других контейнерах. По сути string это тот же вектор, ну
если очень абстрагироваться
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
25.08.2013, 01:12     QVector::reserve() + std::vector::reserve() и добавление в начало #17
Да думаю нет смысла оптимизировать "вывод" тут не вряд ли выиграешь, оптимизировать нужно сам алгоритм расчетов.

Я бы пихал QVector<int>, а затем уже переводил в QString и в QLineEdit
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 01:14     QVector::reserve() + std::vector::reserve() и добавление в начало #18
Цитата Сообщение от gromo Посмотреть сообщение
Так нужно, потому что это результат перевода дробной части числа в определенную систему счисления.
Переводить числа в другую систему счисления через строки? Не глупо ли?
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
25.08.2013, 01:16     QVector::reserve() + std::vector::reserve() и добавление в начало #19
Цитата Сообщение от castaway Посмотреть сообщение
Переводить числа в другую систему счисления через строки? Не глупо ли?
Если числа длинные или еще какой изврат ?

К тому же как я понял QString нужен только для вывода результата, а не для хранения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 01:18     QVector::reserve() + std::vector::reserve() и добавление в начало
Еще ссылки по теме:

C++ Разница между resize и reserve
C++ Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
Как изменять размер std::vector<std::vector>? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 01:18     QVector::reserve() + std::vector::reserve() и добавление в начало #20
Цитата Сообщение от Avazart Посмотреть сообщение
Если числа длинный или еще какой изврат ?
Сильно сомневаюсь что числа длинный, а об изврате я и говорю.
Цитата Сообщение от Avazart Посмотреть сообщение
К тому же как я понял QString нужен только для вывода результата, а не для хранения.
Откуда такая информация?
Yandex
Объявления
25.08.2013, 01:18     QVector::reserve() + std::vector::reserve() и добавление в начало
Ответ Создать тему
Опции темы

Текущее время: 23:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru