c++知识

版权声明:转载请注明出处,谢谢。 https://blog.csdn.net/NNNNNNNNNNNNY/article/details/70807853

虚函数

多态性是面向对象语言的基本特征,多态性可以简单地概括为“一个接口,多种方法”。多态性分为静态多态性(编译过程中绑定)和动态多态性。
函数重载(和运算符重载)属于静态多态性,一个函数名(调用接口)对应着几个不同的函数原型(方法)。
虚函数属于动态多态性,对比如下:
通过对象名访问虚函数时,调用哪个类的函数取决于定义对象名的类型(对象类型是基类时,就调用基类的函数;对象类型是子类时,就调用子类的函数)。
使用指针访问非虚函数时,编译器根据指针本身的类型决定要调用哪个函数(而非根据指针指向的对象类型)。
使用指针(或引用)访问虚函数时,编译器根据指针所指对象的类型决定调用哪个函数(而与指针本身的类型无关)。

指针数组与数组指针

指针数组:装着指针的数组。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

猜你喜欢

转载自blog.csdn.net/NNNNNNNNNNNNY/article/details/70807853