Форум программистов, компьютерный форум 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. Просмотров 1670. Ответов 33
Метки нет (Все метки)

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

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

Ps. Думаю, в std::vector вставка в начало по своей природе неэффективна, но может в QVector тролли что-то мутнули
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 23:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос QVector::reserve() + std::vector::reserve() и добавление в начало (C++):

Std::vector/QVector в классе или std::vector/QVector классов? - C++
Доброе время суток! Собственно вопрос в самой теме, есть некий класс class WorkJornal { private: string manager; ...

Разница между resize и reserve - C++
Всем доброе утро! Следующий вопрос не дает мне спать по ночам - в чём таки разница между resize и reserve класса vector?.. Думала, что...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами - C++
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию? - C++
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()? - C++
Есть такая функция: void Array::SetStartIndexes(sz3_Arr_t *array) { start_index.reserve(array-&gt;size()); ...

Вывести значения std::vector<std::vector<int*> > - C++
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3; std::vector&lt;std::vector&lt;int*&gt; &gt; imatrix; //...

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

Nekto, я и забыл за очередь. Спасибо.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
25.08.2013, 00:33 #6
Цитата Сообщение от gromo Посмотреть сообщение
Я использую Qt, поэтому вряд ли хорошо будет смешивать std:: и Qt контейнеры (или все-таки не так страшно? ).
Qt это не язык, нельзя сказать что это плохо смешивать. Тут главное зависит от того что ты хочешь реализовать.
1
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,792
Записей в блоге: 17
25.08.2013, 00:50 #7
Цитата Сообщение от diagon Посмотреть сообщение
В std::vector будет, в кьюте тоже должна быть эффективнее
Но лучше возьмите дек
Это когда это вставка в начало в векторе была эффектива ?

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

Цитата Сообщение от Avazart Посмотреть сообщение
А что именно неудобно ?
То что я вставляю символы в QString
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,792
Записей в блоге: 17
25.08.2013, 00:55 #9
Ну так может посмотреть в реализацию QString и не гадать ?
Или попробовать и сравнить результат ...
0
Jupiter
25.08.2013, 00:56
  #10

Не по теме:

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

0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
25.08.2013, 00:57 #11
вставка в начало вектора всегда неэффективна. для таких целей существует deque
Цитата Сообщение от gromo Посмотреть сообщение
QString
в таком случае можно вставлять в конец и потом реверсить*
реверсить когда нужно использовать данные, хотя я не знаю что вы там пишите. может быть можно и без этого
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2013, 00:58 #12
Цитата Сообщение от Avazart Посмотреть сообщение
эффектива
Не эффективна, а эффективнее, так как не будет реаллокейтов.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,792
Записей в блоге: 17
25.08.2013, 00:58 #13
Цитата Сообщение от Jupiter Посмотреть сообщение
ваше дело труба
Ну да тут идея не понятна и ее конечная цель.

gromo, Это что типа QString как буфер использовать или чЁ?
При чем тут вектор ?
0
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
25.08.2013, 00:59  [ТС] #14
Цитата Сообщение от Jupiter Посмотреть сообщение
ваше дело труба
Это чего же так?
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2013, 01:00 #15
Цитата Сообщение от gromo Посмотреть сообщение
Это чего же так?
Цитата Сообщение от Avazart Посмотреть сообщение
идея не понятна и ее конечная цель.
...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 01:00
Привет! Вот еще темы с ответами:

Как изменять размер std::vector<std::vector>? - C++
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: std::vector&lt;std::vector&lt;float&gt;&gt; data; ...

Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> - C++
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я ставлю закладку итератора, ...

Реализация класса MyString. Стандартная библиотека, std::string, std::vector - C++
как добавить реализацию конкатенации строк через перегрузку оператора &quot;+=&quot; в классе MyString и почему ошибка выдается???#include...

Передача функции указатель на элемент std::vector<std::string> - C++
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
25.08.2013, 01:00
Ответ Создать тему
Опции темы

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