
c++
文章平均质量分 71
_来信
学习,总结,归纳,练习!
展开
-
c++初识
1.命名空间 :指的是用花括号把一部分文件括起来,并用namespace开头起一个名字:#include //输入输出流using namespace std;///库的所有组件都在std中声明和定义////名字空间:namespace开头起一个名字namespace my{ int a = 0;}namespace you{ int a = 1;}int ma原创 2017-09-26 21:22:08 · 285 阅读 · 0 评论 -
c++:分析智能指针与发展历史
智能指针是RAII思想的一种产品,那么什么是RAII呢? RAII:Resource Acquistion Is Initialization 资源分配就初始化,定义一个类来封装资源的分配和释放。 在构造函数里完成资源分配初始化,在析构函数里完成资源的清理。 简单来举例:template <class T>class AutoPtr{publ原创 2017-11-28 13:04:34 · 397 阅读 · 1 评论 -
详细分析智能指针shared_ptr存在的循环引用缺陷,以及通过weak_ptr来解决
首先来介绍一下智能指针的历史: 知识有限,我以目前的水平模拟实现了简单的shared_ptr:template &amp;amp;amp;lt;class T&amp;amp;amp;gt;class SharedPtr{public: SharedPtr(T* ptr) :_ptr(ptr) , _refCount(new int(1)) {} SharedPtr(SharedPtr&amp;am原创 2017-11-27 17:42:43 · 1012 阅读 · 1 评论 -
快速排序——详细且简单易懂的讲解
假设现在要对{3,4,0,2,1,5,9,6,7,8}快速排序:需要在数组里选出一个数作为基准数,为了方便起见,可以选第一个数字5作为准基数 接着,需要把大于准基数的数放在准基数的右边,小于准基数的数放在准基数的左边: 但是,如何做到这点呢,接下来我详细说明:方法很简单,从这个数组的两边开始进行探测,令i为数组的最左边,j为数组的最右边。 先让j从右出发往走走,找一个小于5的数,再从左原创 2018-04-20 15:11:36 · 1259 阅读 · 0 评论 -
c语言:如何将字符串转为整数?
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空。输出描述:如果是合法的数值表达则返回该数字,否则返回0例如:输入:+2147483647 1a33输出: 2147483647 0一个整数,要么正,要么负,所以需要先判断字符串的第一个字符是否为'+'或'-',如果是...原创 2018-05-24 19:36:36 · 16436 阅读 · 0 评论 -
面试题(剑指offer):顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.如图所示:实际上,就是每一次打印一圈:第一圈的左上角为(0,0),第二圈的左上角为(1,1),……,第n圈的左上角为(n-1,n-1...原创 2018-05-30 18:05:06 · 1735 阅读 · 0 评论 -
总结指针和引用的区别
一:什么是引用 引用就是给一个已经定义的变量起一个别名,并没有定义新的变量; 引用的格式为:类型&amp; 引用变量名 = 已定义过的变量名; int a = 1; int&amp; b = a; cout &lt;&lt; &amp;a &lt;&lt; endl; cout &lt;&lt; &amp;b原创 2018-08-07 19:23:50 · 249 阅读 · 0 评论 -
二叉搜索树的C++代码实现
template<class K,class V>struct BinaryNode{ K _key; V _value; BinaryNode<K,V>* _left; BinaryNode<K,V>* _right; BinaryNode(const K& key,const V& value) :_key(key), _v...原创 2018-09-22 17:49:40 · 911 阅读 · 0 评论 -
AVL树的C++代码实现,如何旋转,判断是否为AVL树
我们知道,二叉搜索树的搜索时间复杂度为O(LgN),但是当插入的K值为有序时,如插入1,2,3,4,5,6…,搜索的时间复杂度又会变为O(N),因为此时的二叉搜索树以及差不多是一个单链表了,如图:所以为了解决这样尴尬的局面,出现了AVL树,源代码如下:template &amp;lt;class K,class V&amp;gt;struct AVLNode{ K _key; V _value; i...原创 2018-09-22 17:57:40 · 1178 阅读 · 0 评论 -
c++:为什么模板不支持分离编译?
什么是分离编译?分离编译模式是指:一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件连接起来形成单一的可执行文件的过程。首先,我创建了一个头文件,两个源文件: Template.h里写声明 Template.cpp里放定义 test.cpp里做测试 r如图,这里调用了Func1函数。 这是一个很简单的例子,我拿它来举例:原创 2017-11-20 17:08:18 · 280 阅读 · 0 评论 -
c++多态对象模型:有虚函数的菱形继承和菱形虚拟继承
- 一:菱形继承class A{public: virtual void func1() { cout << "A::func1()"; } virtual void func2() { cout << "A::func2()"; }public://这里为public,方便待会赋值查看内存 int _a;原创 2017-11-15 11:36:21 · 371 阅读 · 0 评论 -
c++:类型萃取的实现
首先,需要举一个例子来说明c++在什么情况下需要对不同的类型不同对待。template <class T>class SeqList{public: SeqList() :_a(NULL) , _size(0) , _capacity(0) {} void CheckCapacity() { if (原创 2017-11-19 20:07:31 · 441 阅读 · 0 评论 -
time travel-c++实现日期计算器
用到了操作符重载,具体请看代码:这个功能我调试了几天,经过测试我认为没有问题,如果你发现有bug,感谢指正!class Date{public: Date(int year = 2017,int month = 10,int day = 12) { this->_year = year; this->_month = month; this->_day = day;原创 2017-10-12 09:48:47 · 493 阅读 · 0 评论 -
c++一些入门基础,也是初学者容易卡住的地方
一:类和对象:不说那么多官方概念,我认为类就是更高级于c语言的结构体。因为它具有封装性,那么什么是封装?简单来说,类里不仅可以有变量,还可以有函数。不过这个类是声明,不占空间,,像一个模型一样的东西,那么对象就是类的实例化!我举个例子,如果会弹琴的朋友肯定知道看曲谱和真正弹奏的区别,那么类就是一个谱子,一个谱子可以弹奏多首曲子。对象就是它的实例化原创 2017-10-09 11:31:51 · 230 阅读 · 0 评论 -
c++写时拷贝
拿String类举例:class String{public: String(const char* str = "") :_str(new char[strlen(str) + 1]) { strcpy(_str, str); } ~String() { delete[] _str; }private: char* _str;};void test原创 2017-10-31 17:56:36 · 277 阅读 · 0 评论 -
c++动态内存开辟
首先,来谈一谈内存管理: 来看一道很有意思的题目:int i = 1;static int j = 1;//i和j都在数据段(静态区),但链接属性不一样,static在外部文件不可见void test1(){ static int k = 1;//j和k都是static,生命周期一样,但作用域不一样,static不改变变量的作用域 int n = 1;//k和n的生命周期不一原创 2017-10-31 20:18:00 · 2634 阅读 · 0 评论 -
c++用宏模拟实现new/delete new[]/delete[]
首先明确定位new表达式:在已经分配好的原始内存空间调构造初始化。 new (place_address) type; place_address是指针,指向已经分配的内存空间,type是类型。 举例说明:,拿一个简单的SeqList类来举例。class SeqList{public: SeqList(size_t n = 1) :_a(new int[n])原创 2017-11-01 22:45:36 · 869 阅读 · 0 评论 -
C++对传参合传返回值时构造的优化处理
讨论构造拷贝构造中的N种调用情况:用一个简单的日期类来说明问题:class Date{public: Date(int year = 2017,int month = 10,int day = 21) :_year(year) , _month(month) , _day(day) { cout << "构造函数" << endl; } Date(const原创 2017-10-21 21:53:38 · 208 阅读 · 0 评论 -
c++:继承相关的要点热点,以及菱形继承的底层实现
一.3种继承关系下基类成员在派生类的访问关系变化: 这个关系表,我相信在大学里学过c++的朋友们来说,一定不陌生,期末考试前,老师会说:”啊~,这是重点啊,给我好好背。” 但是这个需要背吗?我认为根本不需要,这就是访问关系的变化,可以理解为访问权限的缩小,总的来说: 1.基类的私有成员在派生类不可访问,如果基类成员不想在类外被访问但要在派生类中访问,就定义为保护成员。(所以保护成员限定符是因为原创 2017-11-04 18:37:55 · 262 阅读 · 0 评论 -
c++多态对象模型:单继承,多继承
要理解对象模型,首先需要理解多态是什么?一:多态虚函数:类的成员函数前加virtual 虚函数重写:子类中定义了一个和父类完全相同的虚函数。(覆盖)举一个简单的例子:很多买票的场景,成人需要买全票,但是学生只用买半票,这就有了重写虚函数的必要。class Person{public: virtual void Buy()//成人买全票 { cout << "买全原创 2017-11-14 16:11:39 · 395 阅读 · 0 评论 -
红黑树旋转的通俗易懂版本以及判断一个树是否为红黑树
红黑树属于二叉搜索树,但是每个节点增加了一个存颜色的位,它的规则是:1.根节点为黑色。2.不能有连续的两个红节点,所以如果一个节点的颜色为红,那么它的子节点若不为空则一定为红。3.每条路径上黑节点数量相同。所以保证了最长路径不超过最短路径的两倍,没有AVL树那么严格的平衡,但是旋转少效率高,也是O(LgN)。判断一棵树是否为红黑树: bool IsRB() { if (_r...原创 2018-09-23 10:15:41 · 1686 阅读 · 0 评论