close
You would think on the face of it, that STL - with all of its abstraction and templates - would be slower than doing things the "old fashioned way". However my tests do not bear that out. For a simple test, I wrote a small program that generated 10,000,000 (10 million) random numbers and sorted them using the inbuilt STL sort. Here it is ...
 
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

#define ITEMS 10000000

int main (void)
  {
  vector<int> v (ITEMS);

  generate (v.begin (), v.end (), rand);

  cout << "Starting STL sort ..." << endl;
  sort (v.begin (), v.end ());
  cout << "Finished STL sort." << endl << endl;

  return 0;
  } // end of main
 

And now the same idea using a standard array of ints, and using qsort instead...

#include <iostream>
#include <algorithm>

using namespace std;

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

#define ITEMS 10000000

int v [ITEMS];

int main (void)
  {
  generate_n (v, ITEMS, rand);

  cout << "Starting qsort ..." << endl;
  qsort (v, ITEMS, sizeof(int), compare);
  cout << "Finished qsort." << endl << endl;

  return 0;
  } // end of main

My figures were (on two different PCs, one running Windows NT with Microsoft Visual C++ version 6, one running Red Hat Linux with gcc (GCC) 3.2.2) ... STL Windows with MS VC++: 15 seconds Linux with gcc: 5 seconds qsort Windows with MS VC++: 122 seconds Linux with gcc: 14 seconds It seems that the STL sort was faster by at least a factor of 3. So, I wouldn't be abandoning STL because you think it is too slow. :)
arrow
arrow
    全站熱搜

    NBPBlog 發表在 痞客邦 留言(0) 人氣()