vector <std :: pair> Vs. 2 X向量<t>

时间:2016-01-04 23:46:27

标签: c++ c++11

在运行时,给定数字N(unsigned long int),我必须从用户那里获取2 * N个输入。我必须存放它们。任务完成了,问题不在于如何做。我正在试验代码以及如何使其更加标准和高效。因此,有以下三种选择:

  1. 构建两个std::vector<unsigned long int>向量,以进行存储 每对的第一和第二元素。
  2. 构造一个长度为2 * N的std::vector<unsigned long int>向量。

  3. 构建一个std::vector<std::pair<unsigned long int, unsigned long int> >

  4. 所以,我编写了这个小程序来查看执行速度。

    #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

    因此,选择2比选择2更好。

    同样通过更改代码,可以看出选择3优于选择1。

    事实上,实验表明,选择3优于选择2,优于选择1

    此外,执行时间的变化对于小数据大小来说较小,对于大数据大小则更大。

    这种行为的解释是什么?

1 个答案:

答案 0 :(得分:0)

很难用N的小值来评估各种方法的相对表现。因此,我不会对第一组数字给予太多的重视。

第二组数字表示趋势。

构造

类型的向量时
std::vector<std::pair<unsigned long int, unsigned long int> > 

元素的数量是使用类型

构造的向量的一半
std::vector<unsigned long int>

我猜测性能上的差异是由于在第二种情况下对向量元素进行2*N次迭代以填充数据,而迭代次数减半的事实在第一种情况下填充数据的向量元素。