
C++
文章平均质量分 93
liqinzhe223
这个作者很懒,什么都没留下…
展开
-
深度探索C++对象模型 第一章
第一章 关于对象C++对象模型class Point{public:Point(float xval);virtual ~Point();float x() const;static int PointCount();protected:virtual ostream& print(ostr原创 2017-09-13 22:14:39 · 260 阅读 · 0 评论 -
C++ List 常见用法全解(代码版)
C++ list 常见用法:void bianli(list& vt) //list是不能直接访问数组索引的。底层实现是链表。{ //遍历1 c++11的新特性 for (auto it : vt) cout<<it<<" "; cout<<endl; //遍历2 正向迭代器访问 for (auto原创 2018-01-11 16:54:03 · 349 阅读 · 0 评论 -
C++ Queue 常见用法全解(代码版)
使用deque和list都可以实现queue的底部结构。void queue_test() //queue不能随机访问。只能访问第一个和最后一个{ //创建 queue que; //插入 for (int i = 0; i < 10; i++) que.push(i); //获取 cout<<que.fro原创 2018-01-12 16:36:04 · 884 阅读 · 0 评论 -
C++ priority_queue 常见用法全解(代码版)
priority_queue的用法和queue基本一样,难点在于自定义类型的自动排序。一共有三种写法。默认是vector作为底层结构。代码实例1:class struc{public: int x; int y; struc(int a, int b): x(a), y(b){} bool operator<(const struc& b)原创 2018-01-12 16:38:38 · 1056 阅读 · 0 评论 -
C++ Deque 常见用法全解(代码版)
vector是单向开头的连续线性空间,而deque是双向开口的连续线性空间。支持随机访问(就如d[2]这样)和快速插入和删除。其余的类似vector操作方法的使用.void bianli(deque& dq){ //遍历-1 deque可以随机读取 for (int i = 0; i < dq.size(); i++) cout<<dq[i]<<"原创 2018-01-12 16:40:03 · 1084 阅读 · 0 评论 -
C++ Map/Multimap 常见用法全解(代码版)
c++map容器提供一个键值对(key/value)容器,map与multimap差别仅仅在于multimap允许一个键对应多个值。对于迭代器来说,可以修改实值,而不能修改key。map会根据key自动排序。map底层是使用红黑树。Map代码实例:class sst{public: int x; int y; sst(int a, int b):x(a), y(b原创 2018-01-12 16:42:55 · 2039 阅读 · 0 评论 -
C++ Set/Multiset 常见用法全解(代码版)
set的特性是所有元素会根据元素的键值自动被排序。set不允许有两个元素有相同的键值。set由红黑树作为底层结构。set代码实例:class struc{public: struc(int a, int b): x(a), y(b){} int x; int y;};bool operator<(const struc& a, const str原创 2018-01-12 16:46:58 · 455 阅读 · 0 评论 -
C++ Stack 常见用法全解(代码版)
使用deque和list都可以实现stack的底部结构。void stack_test(){ stack stk; for (int i = 0; i < 10; i++) stk.push(i); cout<<stk.size()<<endl; while (!stk.empty()) { cout<<stk原创 2018-01-12 16:48:53 · 315 阅读 · 0 评论 -
C++ Vector 内存分配
vector会预先分配比当前数据大的一个空间,如果有新的元素进来填满了这个空间,就又会继续分配。分配策略一般是1,2,4,8,16...直接上代码:#include #include #include #include #include #include #include #include #include using namespace std;cla原创 2018-01-22 15:58:49 · 870 阅读 · 0 评论 -
C++算法 求数组中最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 解法一:排序后,取出前k个数。O(nlogn)。代码略。 解法二:建立n个元素的最小堆,每次去除堆顶的最小值,然后弹出堆顶,重新构成最小堆。O(klogn) class Solution {public: vector<i...原创 2018-02-07 11:16:07 · 2792 阅读 · 0 评论 -
C++排序算法代码汇总
排序算法稳定性:两个相同的元素排序前后的相对位置关系不会发生改变。复杂度比较算法平均时间复杂度最好情况最坏情况空间复杂度稳定性冒泡排序O(N^2)O(N^2)O(N^2)O(1)稳定插入排序O(N^2)O(N)O(N^2)O(1)稳定选择排序O(N^2)O(N^2)O(N^2)O(1)稳定希尔排序O(N ^ 3/2 ) O(N^2)O(1)不稳定堆排序O(NlogN)O(NlogN)O(NlogN...原创 2017-12-07 20:34:52 · 15031 阅读 · 0 评论 -
C++ STL中set/map 与 priority_queue 中greater、less 的用法区别
2018.3.4更新:在自定义类的操作符重载的编写的时候,都写'<'符号,在使用STL的set(map)中体现出小的在前面;在使用priority_queue却提现出大的在前面。代码如下:#include <iostream>#include <vector>#include <set>#include <map>#include &l...原创 2018-02-07 11:34:51 · 3506 阅读 · 0 评论 -
C++ Vector 常见用法全解(代码版)
C++ vector 用法:#include #include using namespace std;void bianli(vector& vt){ //遍历1 c++11的新特性 for (auto it : vt) cout<<it<<" "; cout<<endl; //遍历2 直接访问任意元素 for (in原创 2018-01-11 15:15:31 · 468 阅读 · 0 评论 -
Effective C++之七:模板与泛型编程
条款41 了解隐式接口和编译器多态(1)面向对象的编程世界总是以显示接口以及运行期多态解决问题。//显式接口:通常由函数的签名式(函数名称、参数类型、返回类型)构成。class Widget{public: Widget(); virtual ~Widget(); virtualsize_t size() c原创 2017-12-22 10:40:37 · 386 阅读 · 0 评论 -
异常控制流
控制流 分为平滑的控制流(相邻的地址跳转) 和 跳转、调用、返回(控制流突变)突变控制流称为 异常控制流(ECF)异常异常就是控制流中状态的突变,处理器检测到事件发生时,会通过一张 异常表 的跳转表,间接调用异常处理程序。处理完之后,有三种可能性:1、将控制返回当前指令,即事件发生时正在执行的指令2、将控制返回给如果没有发原创 2017-10-04 10:32:44 · 276 阅读 · 0 评论 -
c/c++ 链接、链接器
链接链接:将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存中。编译器作用: .c -> .i -> .s -> .o可重定位目标文件(.o):包含二进制代码和数据,可和其他可重定位目标文件合成 可执行文件。可重定位目标模块里面有一个符号表,包含定义和引用的符号的信息原创 2017-09-22 09:36:32 · 1780 阅读 · 0 评论 -
所有背包问题代码总结 C++
01背包问题在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 注意事项你不可以将物品进行切割。如果有4个物品[2, 3, 5, 7]如果背包的大小为11,可以选择[2, 3, 5]装入背包,最多可以装满10的空间。如果背包的大小为12,可以选择[2, 3, 7]装入背包,最多可以装满12的空间。函数需要返回最多能装满的空间大小。01背包的状态转换方程 f...原创 2017-11-02 19:04:06 · 10765 阅读 · 1 评论 -
[问题解决] multiple definition of `***'
make发现问题如下:我是把 pthread_mutex_t VT_Mutex; 这一句写在 init.h 里面。解决办法:把 pthread_mutex_t VT_Mutex; 写在init.c 里面,init.c include init.h在init.h 里面写 extern pthread_mutex_t VT_Mutex;原创 2017-11-20 11:27:14 · 8820 阅读 · 1 评论 -
KMP算法(代码)
KMP是字符串模式匹配算法,主要的核心:对于目标字符串ptr,ababaca,长度是7,所以next[0],next[1],next[2],next[3],next[4],next[5],next[6]分别计算的是 a,ab,aba,abab,ababa,ababac,ababaca的相同的最长前缀和最长后缀的长度。由于a,ab,aba,abab,ababa,ababac,ab原创 2017-11-17 15:47:22 · 781 阅读 · 0 评论 -
Effective C++之一:让自己习惯C++
0导读(1)extern int x; //加了extern是声明int x;//定义(2)隐式类型转换:从小->大的转换中。比如从char转换为int。从int->long。 自定义对象 派生类对象可以隐式转换为 基类对象。而explicit阻止隐式类型转换。 经常使用在类的构造函数前面。st原创 2017-12-21 10:40:47 · 209 阅读 · 0 评论 -
Effective C++之二:构造/析构/赋值运算
条款5 了解c++默默编写并调用了哪些函数(1)编译器可以暗自为class创建 default构造函数、copy构造函数、copy assignment操作符,以及析构函数。编译器产出的析构函数是 non-virtual的,除非这个类的基类自身声明有virtual析构函数。如果作者声明了构造函数,编译器就不会帮忙创建默认构造函数。class析构函数(无论是编原创 2017-12-21 14:29:45 · 296 阅读 · 0 评论 -
Effective C++之三:以对象管理资源
条款13 以对象管理资源(1)为防止资源泄露,请使用RAII(资源获取时机便是初始化时机)对象,它们在构造函数中获得资源并在析构函数中释放资源。“以对象管理资源”的观念常被称为“资源取得时机便是初始化时机”(RAII),因为我们总是在获得资源后于同一句话以它初始化(或赋值)某个管理对象。void f(){ Investment* pInv =原创 2017-12-21 15:40:51 · 215 阅读 · 0 评论 -
Effective C++之四:设计与声明
条款18 让接口容易被正确使用,不易被误用(1)“阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。客户可能输入错误的日子class Date{pubilc: Date(int month,int day, int year); ...};Date(30,3,1995原创 2017-12-21 15:56:10 · 193 阅读 · 0 评论 -
Effective C++之五:实现
,原创 2017-12-21 16:03:06 · 170 阅读 · 0 评论 -
Effective C++之六:继承与面向对象设计
条款32 确定你的public继承塑模出is-a关系(0)Derived 以 public形式 继承 base,意味着每一个类型的D的对象同时也(is-a)是一个B的对象,反之不成立。(1)public继承意味 is-a。适用于base身上的每一件事也一定适用于derived身上,因为每一个derived对象也一定是base对象。class Pers原创 2017-12-22 10:14:37 · 235 阅读 · 0 评论 -
带父节点的二叉树的后序遍历 不使用递归和stack
#include #include #include #include using namespace std;class ListNode{public: ListNode(int k):val(k){ left = NULL; right = NULL; father = NULL; } ListNode*原创 2018-03-26 19:55:03 · 444 阅读 · 0 评论