可能是因為高中課業繁忙吧,當初覺得 STL 對我來說太多餘了, 所以就沒興趣學了,也就放掉了。 這次重拾 STL ,先從簡單的 vector 來練練手, 並用進制轉換當做主題!

STLStandrad Template Library 的縮寫


十進位轉二進位:

  • 以二進位定義計算
  • 並將每次的結果插入 vector 的起點(後面解釋為什麼是 insert
  • 傳入:整數(int)
  • 回傳:陣列(vector)
vector<int> baseBinary(int number){
    vector<int> result;
    vector<int>::iterator it;
    while(number>0){
        it = result.begin();
        if (number%2==0)
            result.insert(it,0);
        else
            result.insert(it,1);
        number /= 2;
    }

    return result;
}

印出二進位:

  • 因為二進位算完後,答案是結果往前推,所以用的是 insert
  • 這樣一來陣列遍歷就從 begin 就好了
  • iterator 有點像是 for vector指標 ,想要知道其中的值要 取值 (*)
  • 傳入:陣列(vector)
  • 回傳:無(void)
void print(vector<int> number){
    vector<int>::iterator it;
    for(it=number.begin();it!=number.end();it++)
        cout<<*it;
    cout<<endl;
}

二進位轉十進位:

  • 每一位數字乘上想對應的值
  • 傳入:陣列(vector)
  • 回傳:整數(int)
int baseDecimal(vector<int> number){
    int result = 0;
    int length = number.size();
    for(int i=0;i<length;i++){
        result += number[i] * baseTwo[length-i-1];
    }
    return result;
}

宣告以二為基底的次方數值:

  • 全域宣告以便 function 使用
vector<int> baseTwo = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096};

完整程式碼:

#include <iostream>
#include <vector>
using namespace std;

vector<int> baseTwo = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096};
vector<int> baseBinary(int number);
int baseDecimal(vector<int> number);
void print(vector<int> number);

int main()
{
    int number;
    cin>>number;
    vector<int> result;
    result = baseBinary(number);
    print(result);
    cout<<baseDecimal(result);

}

vector<int> baseBinary(int number){
    vector<int> result;
    vector<int>::iterator it;
    while(number>0){
        it = result.begin();
        if (number%2==0)
            result.insert(it,0);
        else
            result.insert(it,1);
        number /= 2;
    }

    return result;
}

int baseDecimal(vector<int> number){
    int result = 0;
    int length = number.size();
    for(int i=0;i<length;i++){
        result += number[i] * baseTwo[length-i-1];
    }
    return result;
}

void print(vector<int> number){
    vector<int>::iterator it;
    for(it=number.begin();it!=number.end();it++)
        cout<<*it;
    cout<<endl;
}

之後再將其他進制補上