Во время выполнения, заданного числом N (без знака long int), я должен принимать 2 * N входных данных от пользователя. Я должен их хранить. Задача выполнена, и вопрос заключается не в том, как это сделать. Я экспериментировал с кодом и как сделать его более стандартным и эффективным. Таким образом, существуют следующие три варианта среди других:vector <std::pair> Vs. 2 X vector <T>
- Построить два
std::vector<unsigned long int>
векторов, хранить первый и второй элемент соответственно каждой пары. Construct one
std::vector<unsigned long int>
вектор длины 2 * N.Построить один
std::vector<std::pair<unsigned long int, unsigned long int> >
.
Итак, я написал эту небольшую программу, чтобы увидеть скорость выполнения.
#include<iostream>
#include<vector>
#include<utility>
#include<ctime>
using namespace std;
int main(int argc, char* argv[]){
const unsigned long int len{10^10};
clock_t time1{clock()};
for(auto i = 1;i<100000;++i)
vector<unsigned long int>veca(2*len);
// vector<unsigned long int>vecb(len);
cout<<((double)(clock()-time1)/CLOCKS_PER_SEC)/(100000)<<endl;
time1 = clock();
typedef pair<unsigned long int, unsigned long int> NumberPair;
for(auto i = 1; i<100000;++i)
vector<NumberPair>vecu(len);
cout<<((double)(clock()-time1)/CLOCKS_PER_SEC)/(100000)<<endl;
return 1;
}
Выход был
- 2.3658e-07
- 3.1432e-07
Если вместо 10, длина 10^10 используется, то, то выход
- 1.6742e-07
- 8.591e-08
Таким образом, лучше пойти на выбор 3, чем выбор 2.
Аналогичным путем изменения кода, можно показать, что выбор 3 лучше, чем выбор 1.
Infact, эксперименты показывают, что выбор 3 лучше выбора 2, который лучше выбора 1
Кроме того, изменение времени выполнения меньше для небольших размеров данных и больше для больших размеров данных.
Какое объяснение такого поведения?
Объяснение заключается в том, что вы выполняли плохую маркировку. Чтобы получить какой-либо значимый результат, запустите тот же код в цикле и время. Затем вы можете разделить общее время на номер повторения, чтобы получить среднее время. Это должно устранить временные издержки, так или иначе – StoryTeller
@StoryTeller Я обновил код для среднего времени. Результаты согласуются. –
'10^10' равно нулю. – aschepler