Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
1

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

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

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

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

Ps. Думаю, в std::vector вставка в начало по своей природе неэффективна, но может в QVector тролли что-то мутнули
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2013, 23:09
Ответы с готовыми решениями:

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

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

Двумерный вектор. Не работает reserve()
Пишу динамическую таблицу, элементы и размеры которой задаются из .txt. Использую двумерный...

Реализация функций reserve и clear для вектора
Мне нужно самой написать реализацию. От что у меня есть: template<typename T> void...

33
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 00:03 2
А зачем вставлять именно в начало? Объекты все равно должны будут сдвигаться. std::deque тогда лучше использовать
2
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
25.08.2013, 00:05 3
std::vector от компилятора к компилятору реализован немного по-разному. Почему бы тебе не состряпать benchmark и посмотреть?
1
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2013, 00:16 4
Цитата Сообщение от gromo Посмотреть сообщение
будет ли эффективнее вставка
В std::vector будет, в кьюте тоже должна быть эффективнее
Но лучше возьмите дек
1
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
25.08.2013, 00:29  [ТС] 5
Цитата Сообщение от Nekto Посмотреть сообщение
А зачем вставлять именно в начало? Объекты все равно должны будут сдвигаться.
Можно, конечно, в конец, но неудобно потом будет с реверсивными итераторами и т.д.
Цитата Сообщение от castaway Посмотреть сообщение
std::vector от компилятора к компилятору реализован немного по-разному. Почему бы тебе не состряпать benchmark и посмотреть?
Я использую Qt, поэтому вряд ли хорошо будет смешивать std:: и Qt контейнеры (или все-таки не так страшно? ). А за идею замерить спасибо, обязательно попробую.

Nekto, я и забыл за очередь. Спасибо.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
25.08.2013, 00:33 6
Цитата Сообщение от gromo Посмотреть сообщение
Я использую Qt, поэтому вряд ли хорошо будет смешивать std:: и Qt контейнеры (или все-таки не так страшно? ).
Qt это не язык, нельзя сказать что это плохо смешивать. Тут главное зависит от того что ты хочешь реализовать.
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.08.2013, 00:50 7
Цитата Сообщение от diagon Посмотреть сообщение
В std::vector будет, в кьюте тоже должна быть эффективнее
Но лучше возьмите дек
Это когда это вставка в начало в векторе была эффектива ?

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

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

Не по теме:

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

0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
25.08.2013, 00:57 11
вставка в начало вектора всегда неэффективна. для таких целей существует deque
Цитата Сообщение от gromo Посмотреть сообщение
QString
в таком случае можно вставлять в конец и потом реверсить*
реверсить когда нужно использовать данные, хотя я не знаю что вы там пишите. может быть можно и без этого
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2013, 00:58 12
Цитата Сообщение от Avazart Посмотреть сообщение
эффектива
Не эффективна, а эффективнее, так как не будет реаллокейтов.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.08.2013, 00:58 13
Цитата Сообщение от Jupiter Посмотреть сообщение
ваше дело труба
Ну да тут идея не понятна и ее конечная цель.

gromo, Это что типа QString как буфер использовать или чЁ?
При чем тут вектор ?
0
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
25.08.2013, 00:59  [ТС] 14
Цитата Сообщение от Jupiter Посмотреть сообщение
ваше дело труба
Это чего же так?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.08.2013, 01:00 15
Цитата Сообщение от gromo Посмотреть сообщение
Это чего же так?
Цитата Сообщение от Avazart Посмотреть сообщение
идея не понятна и ее конечная цель.
...
0
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
25.08.2013, 01:05  [ТС] 16
Цитата Сообщение от Avazart Посмотреть сообщение
Это что типа QString как буфер использовать или чЁ?
нет, я вставляю цифры в виде QChar ('1') в начало строки. Так нужно, потому что это результат перевода дробной части числа в определенную систему счисления. Результирующий QString выводится в QLineEdit.
Цитата Сообщение от Avazart Посмотреть сообщение
При чем тут вектор ?
Ну это я так, по аналогии хотел заодно узнать и о других контейнерах. По сути string это тот же вектор, ну
если очень абстрагироваться
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.08.2013, 01:12 17
Да думаю нет смысла оптимизировать "вывод" тут не вряд ли выиграешь, оптимизировать нужно сам алгоритм расчетов.

Я бы пихал QVector<int>, а затем уже переводил в QString и в QLineEdit
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
25.08.2013, 01:14 18
Цитата Сообщение от gromo Посмотреть сообщение
Так нужно, потому что это результат перевода дробной части числа в определенную систему счисления.
Переводить числа в другую систему счисления через строки? Не глупо ли?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.08.2013, 01:16 19
Цитата Сообщение от castaway Посмотреть сообщение
Переводить числа в другую систему счисления через строки? Не глупо ли?
Если числа длинные или еще какой изврат ?

К тому же как я понял QString нужен только для вывода результата, а не для хранения.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
25.08.2013, 01:18 20
Цитата Сообщение от Avazart Посмотреть сообщение
Если числа длинный или еще какой изврат ?
Сильно сомневаюсь что числа длинный, а об изврате я и говорю.
Цитата Сообщение от Avazart Посмотреть сообщение
К тому же как я понял QString нужен только для вывода результата, а не для хранения.
Откуда такая информация?
0
25.08.2013, 01:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2013, 01:18
Помогаю со студенческими работами здесь

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

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

Быстрое пошаговое добавление С-массивов в std::vector
Так... Допустим есть: int sizeA = 100; int* a = new; int sizeB = 200; int* b = new; //ну там...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru