Wednesday, January 25, 2012

Vector Template (C++)

使用C語言中的array之後,會發現有幾件常做的事情,卻是很不方便:
(假設a1, a2為兩個array)

  1. 比較兩個array是否相同
    • 不能直接a1==a2, a1!=a2
    • 應該要用for/while loop掃描一次,看看是否全部相同
  2. 複製array
    • 不能直接a1=a2
    • 應該要用for/while loop掃描一次,一個一個element複製
  3. array大小
    • 沒有快速的方法
    • 應該要用sizeof(a1)/sizeof(a1[0])
因為array的名字只是array起點的記憶體位置,所以往往不能直覺的把他當作普通變數運算。

C++中有一個新東西要作vector,是一種template,定義在<vector>標頭檔裡面。宣告方式:
vector<type> name(size);
example:
vector<int> v1(10); 
讀取裡面elements的方式和array相同,使用中括號[ ],此外,上述的三件事情他可以簡易的完成:
(假設v1, v2為vector)

  1. v1==v2, v1!=v2
  2. v1 = v2
  3. v1.size(), v2.size()
Here's a simple example:

#include <iostream>
#include <vector>

using namespace std;

int main(){

 //variables
 int i;

 //vector definition
 vector<int> v1(10);
 vector<int> v2(10);

 //input
 for(i=0 ; i<v1.size() ; i++){
  cin >> v1[i];
 }

 //output
 for(i=0 ; i<v1.size() ; i++){
  cout << v1[i] << "\t";
 }
 cout << endl;

 //copy
 v2 = v1; // copy v1 to v2
 //output v2
 for(i=0 ; i<v1.size() ; i++){
  cout << v1[i] << "\t";
 }
 cout << endl;

 //compare
 if(v1 == v2) cout << "same." << endl;
 else cout << "different." << endl;

 //do some change and compare again
 v2[0] = -1;
 if(v1 == v2) cout << "same." << endl;
 else cout << "different." << endl;

 return 0;
}