在运行时,给定数字N(unsigned long int),我必须从用户那里获取2 * N个输入。我必须存放它们。任务完成了,问题不在于如何做。我正在试验代码以及如何使其更加标准和高效。因此,有以下三种选择:
std::vector<unsigned long int>
向量,以进行存储
每对的第一和第二元素。 构造一个长度为2 * N的std::vector<unsigned long int>
向量。
构建一个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;
}
输出
如果不使用10,则使用10 ^ 10的长度,然后输出
因此,选择2比选择2更好。
同样通过更改代码,可以看出选择3优于选择1。
事实上,实验表明,选择3优于选择2,优于选择1
此外,执行时间的变化对于小数据大小来说较小,对于大数据大小则更大。
这种行为的解释是什么?
答案 0 :(得分:0)
很难用N
的小值来评估各种方法的相对表现。因此,我不会对第一组数字给予太多的重视。
第二组数字表示趋势。
构造
类型的向量时std::vector<std::pair<unsigned long int, unsigned long int> >
元素的数量是使用类型
构造的向量的一半std::vector<unsigned long int>
我猜测性能上的差异是由于在第二种情况下对向量元素进行2*N
次迭代以填充数据,而迭代次数减半的事实在第一种情况下填充数据的向量元素。