Слышал, что если делать в вектор push_back
, то если у него не хватает внутреннего буфера, то он увеличивается в 1.5 раза. Правда ли?
Будет ли тоже самое происходить когда я буду делать последовательно resize
:
for(int i=0; i<N; i++) {
b.resize(i+1);
b[i] = i;
}
Написал код, который сравнивает время исполнения каждой из версий. Вторая получается немного медленнее.
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
int main() {
const int N = 10000000;
clock_t tStart;
vector<int> a;
tStart = clock();
for(int i=0; i<N; i++) a.push_back(i);
printf("Time taken: %.4f sec\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
vector<int> b;
tStart = clock();
for(int i=0; i<N; i++) {
b.resize(i+1);
b[i] = i;
}
printf("Time taken: %.4f sec\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
return 0;
}
Пример вывода на ideone:
Time taken: 0.0649 sec
Time taken: 0.0692 sec
Лучше для добавления элементов брать не vector а list или unordered_set. Можно запустить вот это и узнать что происходит с вектором.
for(int i=0; i<N; i++) {
b.resize(i+1);
cout<<i+1<<" "<<b.capacity()<<endl;
}
В одной онлайн IDE
1 1
2 2
3 4
4 4
5 8
...
16 16 17 32
b.resize(i+1);
b[i] = i;
Два раза присваивается значение сначала 0 потом цифра наверное поэтому дольше.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При нажатии на кнопку "Старт", в консольке выскакивает ошибка, указывающую на один из заголовочных файлов Box2D, после чего компилятор начинает...
Использую JavaScript-порт кодировщика LAME для конвертирования WAV-файла в MP3