C++
架起时光机的猪猪侠
噩梦般的修行
展开
-
C++ 快排算法
快速排序, 利用了分治思想, 将问题分成细小部分, 大问题打碎成一个个小问题, 一个一个的突破处理. 快排, 现实中有一个常见的场景, 就是一群人从矮到高排列. 先拿一个人出来, 这个人作为参照, 比这个人高的全部排在后面, 比这个人矮的全部排在前面. 排完后, 以这个人为分界, 前面都是比这个人矮的, 后面的都是比这个人矮的, 所以后面只需要前面部分和后面部分自己再按照上面的方式类推地进行排序就可以了 #include <iostream> #include <stdio.h> #原创 2021-02-22 16:28:20 · 428 阅读 · 0 评论 -
static_cast,dynamic_cast,reinterpret_cast,const_cast相关
static_cast, 如何字面翻译, 静态转换, 这种转换支持基本类型间的转换. 同时会在***编译期***进行类型转换的安全检查.对于像char/int/double…这些类型的转换, static_cast没有问题. 对于非基本类型的,像用户自己构造的类, 如果想要通过子类和父类之间转换,Eg: static_cast(subClassObj), 像这种, 编译器在编译期能够检查通过;但是有一点, 当父类型向子类型转换, 编译器会报错, 这种downcast, 因为父类型不一定是子类,(反过来则..原创 2021-02-22 11:28:20 · 89 阅读 · 0 评论 -
::operator new 和new
c++中new的过程其实是分成了两个步骤来的. 1. 为需要new的对象开辟空间 2. 利用新开辟的空间来创建对象 其中为对象开辟空间的是operator new(sizeof(T)), T表示对象类型, 然后调用T的构造函数T::T(), 此时operator new的空间将用来存放改 对象 这个可以通过T重载operator new函数(虽然很多书籍是不提倡重载operator new的, 只是当验证用) , 然后在调试的时候, 给这个函数打断点, 然后在new的时候也打上断点,就可以看出来. c原创 2021-02-21 07:42:19 · 258 阅读 · 0 评论 -
排序去重算法
void runAlgorithn(int arr[], int n_size) { sort(arr); // 先排序 int i = 0, j = 1; for (; j < n_size; j++) { if (arr[i] != arr[j]) { arr[++i] = arr[j]; } } int idx = 0; for (; idx <= i; idx++) { // i+1是不重复数的总数 printf("arr[%d] = %d\n",原创 2021-02-19 23:05:16 · 286 阅读 · 0 评论 -
C++11 New Feature(std::enable_shared_from_this)
我们创建了一个类的对象,同时让std::shared_ptr来管理这个对象,如果此时我们需要传递该对象给其他地方使用时,我们也需要使用std::shared_ptr来传递这个对象. 这里有一小段代码 class c_A { public: ~c_A() { std::cout << "c_A destructor\n"; } }; int main_c_A() { c_A* c_a = new c_A(); std::shared_ptr<原创 2021-01-20 11:47:07 · 429 阅读 · 0 评论