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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
#1

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

24.08.2013, 23:09. Просмотров 1616. Ответов 33
Метки нет (Все метки)

Если зарезервировать в новосозданном векторе место, а затем добавлять объекты классов в начало - будет ли эффективнее вставка? Или предварительная резервация эффективна только для push_back() ?

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

Ps. Думаю, в std::vector вставка в начало по своей природе неэффективна, но может в QVector тролли что-то мутнули
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 23:09     QVector::reserve() + std::vector::reserve() и добавление в начало
Посмотрите здесь:
Std::vector/QVector в классе или std::vector/QVector классов? C++
C++ Разница между resize и reserve
C++ Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()? C++
Как изменять размер std::vector<std::vector>? C++
Вывести значения std::vector<std::vector<int*> > C++
Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 00:03     QVector::reserve() + std::vector::reserve() и добавление в начало #2
А зачем вставлять именно в начало? Объекты все равно должны будут сдвигаться. std::deque тогда лучше использовать
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 00:05     QVector::reserve() + std::vector::reserve() и добавление в начало #3
std::vector от компилятора к компилятору реализован немного по-разному. Почему бы тебе не состряпать benchmark и посмотреть?
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2013, 00:16     QVector::reserve() + std::vector::reserve() и добавление в начало #4
Цитата Сообщение от gromo Посмотреть сообщение
будет ли эффективнее вставка
В std::vector будет, в кьюте тоже должна быть эффективнее
Но лучше возьмите дек
gromo
370 / 269 / 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 00:33     QVector::reserve() + std::vector::reserve() и добавление в начало #6
Цитата Сообщение от gromo Посмотреть сообщение
Я использую Qt, поэтому вряд ли хорошо будет смешивать std:: и Qt контейнеры (или все-таки не так страшно? ).
Qt это не язык, нельзя сказать что это плохо смешивать. Тут главное зависит от того что ты хочешь реализовать.
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,284
Записей в блоге: 17
25.08.2013, 00:50     QVector::reserve() + std::vector::reserve() и добавление в начало #7
Цитата Сообщение от diagon Посмотреть сообщение
В std::vector будет, в кьюте тоже должна быть эффективнее
Но лучше возьмите дек
Это когда это вставка в начало в векторе была эффектива ?

Добавлено через 1 минуту
Цитата Сообщение от gromo Посмотреть сообщение
Можно, конечно, в конец, но неудобно потом будет с реверсивными итераторами и т.д.
А что именно неудобно ?
По моему их и делали для того что бы было удобно.
gromo
370 / 269 / 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
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,284
Записей в блоге: 17
25.08.2013, 00:55     QVector::reserve() + std::vector::reserve() и добавление в начало #9
Ну так может посмотреть в реализацию QString и не гадать ?
Или попробовать и сравнить результат ...
Jupiter
25.08.2013, 00:56
  #10

Не по теме:

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

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
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2013, 00:58     QVector::reserve() + std::vector::reserve() и добавление в начало #12
Цитата Сообщение от Avazart Посмотреть сообщение
эффектива
Не эффективна, а эффективнее, так как не будет реаллокейтов.
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,284
Записей в блоге: 17
25.08.2013, 00:58     QVector::reserve() + std::vector::reserve() и добавление в начало #13
Цитата Сообщение от Jupiter Посмотреть сообщение
ваше дело труба
Ну да тут идея не понятна и ее конечная цель.

gromo, Это что типа QString как буфер использовать или чЁ?
При чем тут вектор ?
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.08.2013, 00:59  [ТС]     QVector::reserve() + std::vector::reserve() и добавление в начало #14
Цитата Сообщение от Jupiter Посмотреть сообщение
ваше дело труба
Это чего же так?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2013, 01:00     QVector::reserve() + std::vector::reserve() и добавление в начало #15
Цитата Сообщение от gromo Посмотреть сообщение
Это чего же так?
Цитата Сообщение от Avazart Посмотреть сообщение
идея не понятна и ее конечная цель.
...
gromo
370 / 269 / 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
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,284
Записей в блоге: 17
25.08.2013, 01:12     QVector::reserve() + std::vector::reserve() и добавление в начало #17
Да думаю нет смысла оптимизировать "вывод" тут не вряд ли выиграешь, оптимизировать нужно сам алгоритм расчетов.

Я бы пихал QVector<int>, а затем уже переводил в QString и в QLineEdit
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 01:14     QVector::reserve() + std::vector::reserve() и добавление в начало #18
Цитата Сообщение от gromo Посмотреть сообщение
Так нужно, потому что это результат перевода дробной части числа в определенную систему счисления.
Переводить числа в другую систему счисления через строки? Не глупо ли?
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,284
Записей в блоге: 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() и добавление в начало
Еще ссылки по теме:
Передача функции указатель на элемент std::vector<std::string> C++
статическая и динамическая матрица на std::array and std::vector C++
std::map, std::vector и порядок обхода коллекции C++
C++ Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
C++ vector<vector<double>> + std::sort()

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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() и добавление в начало
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru