c++知識

虛函數

多態性是面嚮對象語言的基本特徵,多態性可以簡單地概括爲“一個接口,多種方法”。多態性分爲靜態多態性(編譯過程中綁定)和動態多態性。
函數重載(和運算符重載)屬於靜態多態性,一個函數名(調用接口)對應着幾個不同的函數原型(方法)。
虛函數屬於動態多態性,對比如下:
通過對象名訪問虛函數時,調用哪個類的函數取決於定義對象名的類型(對象類型是基類時,就調用基類的函數;對象類型是子類時,就調用子類的函數)。
使用指針訪問非虛函數時,編譯器根據指針本身的類型決定要調用哪個函數(而非根據指針指向的對象類型)。
使用指針(或引用)訪問虛函數時,編譯器根據指針所指對象的類型決定調用哪個函數(而與指針本身的類型無關)。

指針數組與數組指針

指針數組:裝着指針的數組。int *a[10]
數組指針:指向數組的指針。int (*p)[10]

不同類型數據的佔用空間大小

unsigned long long最大值ULLINT_MAX=0xffffffffffffffff(~18*10^18);
int最大值INT_MAX=0x7fffffff(~2*10^8)

標準模板庫STL的常用容器

順序容器:vector, deque, list
關聯容器:set, multiset, map, multimap
寫個multiset實現最小堆的例子:

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

struct Custom {
    int a;
    char b;
};

int main() {
    vector<Custom> v{ Custom{ 1, 'a' } ,Custom{ 3, 'c' }, Custom{ 4, 'd' } ,Custom{ 2, 'b' } };
    auto cmp = [](Custom left, Custom right) { return left.a < right.a; };
    multiset<Custom, decltype(cmp)> customSet(cmp);
    customSet.insert(v.begin(), v.end());
    multiset<Custom, decltype(cmp)>::iterator customIterator;
    while(!customSet.empty()) {
        customIterator = customSet.begin();
        cout << (*customIterator).a << (*customIterator).b << " ";
        customSet.erase(customIterator);
    }
    return 0;
}

容器適配器: stack, queue, priority_queue 。都有3個成員函數:push()、top()、pop()。

排序算法sort

需要隨機訪問迭代器(vector、deque)的支持。
寫個sort和lambda結合排序的例子:

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

struct Custom {
    int a;
    char b;
};

int main() {
    vector<Custom> v{ Custom{ 1, 'a' } ,Custom{ 3, 'c' }, Custom{ 4, 'd' } ,Custom{ 2, 'b' } };
    auto cmp = [](Custom left, Custom right) { return left.a < right.a; };
    sort(v.begin(), v.end(), cmp);
    for (Custom& e : v) {
        cout << e.a << e.b << " ";
    }
    return 0;
}

輸出:1a 2b 3c 4d

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章