c ++: вектор выпуска векторов

Я написал код на C ++, где я тестирую время выполнения вектора push_back. У меня есть вектор вектора. Я назвал мой основной вектор mainVec, а встроенный вектор — subVec. Итак, я вставил 2 ^ 20 элементов в subVec, а затем вставил 2 ^ 20 назад в mainVec. Однако в цикле subVec-push_back у меня есть команда cout, которая не выполняется. Я надеялся, что вы можете указать на мою ошибку.

Вот код (в коде нет ошибки):

vector<int> subVec;
vector< vector<int> > mainVec;

//Fills the subvector with 2^20 elements
for( size_t i = 0; i < (pow(2,20)+1); ++i) subVec.push_back(i);

//Filling of the maiVec with 2^20 subVec
for( size_t j = 10; j < 21; ++j) {
cout << pow(2,j) << endl;
clock_t t1 = clock();

//2^j times subVec is push_backed for j < 21
for( size_t k = 0; k < pow(2,j); ++k ) mainVec.push_back( subVec );

t1 = clock()-t1;

//Outputting to file
cout << "\t" << (float(t1) / CLOCKS_PER_SEC) << endl;
//ofs << pow(2,j) << "\t\t" << (float(t1) / CLOCKS_PER_SEC) << endl;
}

0

Решение

Есть несколько проблем с вашим кодом.

Во-первых, вам не нужно +1 в первом цикле, т.е. pow(2,20)+1, Так как вы начинаете с 0 и хотите 2 ^ 20 раз, вам нужно сделать до i<2^20,

Во-вторых, лучше рассчитать pows перед циклом, иначе он будет вычислять их каждый раз, и это может занять вечность.

В-третьих, вы можете сделать 1<<j вместо pow(2,j), Просто к вашему сведению.

В-четвертых, и самое главное, мы говорим об огромном количестве памяти здесь. Даже ваш самый маленький цикл выполняет 2 ^ 30 дюймов, что составляет 4 ГБ памяти. Я предполагаю, что ваша программа просто убивает ваш компьютер, и причина, по которой она никогда не печатает второй cout является то, что он не попадает туда (потому что он пытается использовать файл подкачки для памяти). Попробуйте использовать меньшие числа, скажем, 2 ^ 10 для первого цикла, и посмотрите, получите ли вы выходные данные.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector