C++:學習STL的理由

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

底下用三種版本的程式碼說明:

/*
 * 第一版:史前時代--轉木取火
 * 採用大容量的靜態數組分配。 
 * 限定輸入的數據個數。 
 * 採用動態內存分配。 
 */
#include <stdlib.h>
#include <iostream>

using namespace std;
int compare(const void *arg1, const void *arg2);

void main(void)
{
  const int max_size = 10; // 數組允許元素的最大個數
  int num[max_size]; // 整型數組
  
  // 從標準輸入設備讀入整數,同時累計輸入個數,
  // 直到輸入的是非整型數據為止
  int n;
  for (n = 0; cin >> num[n]; n ++);
  
  // C標準庫中的快速排序(quick-sort)函數
  qsort(num, n, sizeof(int), compare);
  
  // 將排序結果輸出到標準輸出設備
  for (int i = 0; i < n; i ++)
  cout << num[i] << "\n";
}

// 比較兩個數的大小,
// 如果*(int *)arg1比*(int *)arg2小,則返回-1
// 如果*(int *)arg1比*(int *)arg2大,則返回1
// 如果*(int *)arg1等於*(int *)arg2,則返回0
int compare(const void *arg1, const void *arg2)
{
  return (*(int *)arg1 < *(int *)arg2) ? -1 :
  (*(int *)arg1 > *(int *)arg2) ? 1 : 0;
}


/*
 * 第二版:工業時代--組件化大生產 
 */
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void main(void)
{
  vector<int> num; // STL中的vector容器
  int element;
  
  // 從標準輸入設備讀入整數,
  // 直到輸入的是非整型數據為止
  while (cin >> element)
  num.push_back(element);
  
  // STL中的排序算法
  sort(num.begin(), num.end());
  
  // 將排序結果輸出到標準輸出設備
  for (int i = 0; i < num.size(); i ++)
    cout << num[i] << "\n";
}

/*
 * 第三版:唯美主義的傑作
 */
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

void main(void)
{
  typedef vector<int> int_vector;
  typedef istream_iterator<int> istream_itr;
  typedef ostream_iterator<int> ostream_itr;
  typedef back_insert_iterator< int_vector > back_ins_itr;
  
  // STL中的vector容器
  int_vector num;
  
  // 從標準輸入設備讀入整數,
  // 直到輸入的是非整型數據為止
  copy(istream_itr(cin), istream_itr(), back_ins_itr(num));
  
  // STL中的排序算法
  sort(num.begin(), num.end());
  
  // 將排序結果輸出到標準輸出設備
  copy(num.begin(), num.end(), ostream_itr(cout, "\n"));
}

那你了解了嗎?

沒有留言: