c++
arctan90°
莫把遗憾留给来日方长、
展开
-
C++:拷贝构造&赋值运算符的重载
拷贝构造函数: 用一个已经存在的对象来生成一个相同类型的新对象。(浅拷贝)默认的拷贝构造函数: 如果自定义了拷贝构造函数,编译器就不在生成默认的拷贝构造函数。 如果没有自定义拷贝构造函数,但在代码中用到了拷贝构造函数,编译器会生成默认的拷贝构造函数。深拷贝&浅拷贝: 系统默认的拷贝构造函数是浅拷贝,类中含有指针类型的...原创 2018-12-04 18:18:57 · 2009 阅读 · 2 评论 -
堆(Heap)、栈(Stack)
堆栈分为数据结构和程序内存中。数据结构中堆和栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。栈:栈是一种先进后出的数据结构(FI LO)。图示: 对栈而言,栈中的新加数据项放在其他数据的顶部,移除时只能移除最顶部的数据(不能越位获取)。若要取出放在一摞书底下的书(放入的比较早的书),首先要移开压在它上...原创 2019-04-15 22:10:07 · 350 阅读 · 0 评论 -
C++:重载、重写、重定义
C++ 重载、重写和重定义重载:函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部。重写:即覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数。重定义:即隐藏,子类重新定义父类中有相同名称的非虚函数( 参数相同 )虚/非虚函数(参数不同),派生类的函数屏蔽了与...原创 2019-04-22 20:32:12 · 1411 阅读 · 2 评论 -
C:函数指针&指针函数
函数指针1)函数指针:本质是一个指针,但这个指针指向的是函数,并不是普通的基本数据类型或者类对象。 (函数指针可以像一般函数一样,用于调用函数、传递参数。)2) 定义:type (*func)(type , type ) eg:int (*fun)(int a, int b); // 声明函数指针 // 该函数指针 fun...原创 2019-04-13 16:14:31 · 4894 阅读 · 0 评论 -
strcpy、strncpy、memcpy
strcpy、strncpy、memcpy区别一、strcpy函数原型:char* strcpy(char* dest,const char* src)功能:把src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间,返回指向dest的指针。注意,src和dest所指内存区域不可以重叠且dest必须需有足够的空间来容纳src的字符串,strcpy它只用于字符串复...原创 2019-04-25 00:06:19 · 206 阅读 · 1 评论 -
回调函数
回调函数百度百科: 回调函数是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递 给另一个函数,当这个指针被用来调用时,所指向的函数,就是回调函数。 回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的...原创 2019-05-13 21:17:57 · 197 阅读 · 0 评论 -
求最大公约数
暴力枚举从较小整数的一半开始,找到一个合适的整数 i,看看这个整数能否被a和b同时整除。int getGreatestCommonDivisor1(int a, int b)//暴力{ int big = a > b ? a : b; int small = a < b ? a : b; if (big%small == 0) { return small; ...原创 2019-05-20 22:15:04 · 629 阅读 · 0 评论 -
寻找全排列的下一个数
题目:给出一个正整数,找出这个正整数所有数字全排列的下一个数。(在一个整数所包含数字的全部组合中,找到一个大于且仅大于原数的新整数)如果输入 12345 则返回 12354如果输入 12354 则返回 12435如果输入 12435 则返回 12453思考:由固定几个数字组成的整数,怎样排列最大,怎样排列最小?解答:逆序排列最大,顺序排列最小。例子: 给出1、2...原创 2019-05-22 18:22:06 · 1457 阅读 · 8 评论 -
鸡尾酒排序
冒泡排序的思想:冒泡排序的每一个元素都像气泡一样,根据自身大小,一点一点向着数组的一侧移动。算法的每一轮从都是从左到右比较元素,进行单向的位置交换。鸡尾酒排序做了怎样的优化呢?鸡尾酒排序的元素比较和交换过程是双向的。看这样一个例子:有8个数 组成一个无序数列:2,3,4,5,6,7,8,1,从小到大排序。按照冒泡排序的思想,过程如下:鸡尾酒排序过程:第一...原创 2019-05-22 22:42:27 · 224 阅读 · 0 评论 -
设计模式:观察者模式
C++中简单的事件通知: 调用接口观察者设计模式:监听者:处理事件观察者:观察事件,当有事件到来,通知监听者处理事件假如:Listener1 感兴趣 1 2 事件Listener2 感兴趣 2 3 事件Listener3 感兴趣 1 3 事件监听者 把自己的标识,还有感兴趣的事件类型 注册到 观察者里流程:通过注册把监听者自己的标识,及感兴趣的事件注册到观察...原创 2019-08-18 19:59:33 · 132 阅读 · 0 评论 -
STL:vector的基本使用
目录vector的构建vector的插入vector的排序vector的构建 vector<int> vec1; //不带参数的构造函数初始化 vector<int> vec2(10); //初始化元素个数为10,默认初始化为0 vector<int> vec3(10, 40); //开辟1...原创 2019-08-19 19:52:12 · 120 阅读 · 0 评论 -
STL:string获取字符串元素:[]和at()
字符串中元素的访问是允许的,一般可使用两种方法访问字符串中的单一字符:下标操作符[]和成员函数at()。两者均返回指定的下标位置的字符。第 1 个字符索引(下标)为 0,最后的字符索引(下标)为 length()-1。使用 []#include<iostream>#include<string>#include<algorithm>us...原创 2019-09-01 19:54:48 · 977 阅读 · 0 评论 -
STL:swap收缩vector空间
目录size 与capacity区别resize()并不能缩容size 与capacity区别 size 表示vector中元素的个数,此方法是返回该vector对象当前有多少个元素。 capacity 表示vector可容纳的元素大小,意思是容量,此方法返回的是该vector对象最多能容纳多少个元素。 #include<iostream>#inc...原创 2019-09-02 12:32:07 · 510 阅读 · 0 评论 -
STL:set的API
目录set 构造、赋值、插入、删除set 查找操作set是一种关联式容器,特性如下:set以RBTree作为底层容器 不允许出现键值重复 set容器只提供 insert()方法,因为它自动进行排序 不能通过迭代器来改变set的值,可以通过set是迭代器改变元素的值吗??不可以改变,如果非要改变,删除后再添加。 如果set中允许修改键值的话,那么首...原创 2019-09-06 11:36:41 · 332 阅读 · 0 评论 -
C++:继承与多态(2)
继承方式:私有继承:has_a 关系保护、公有:is_a 关系隐藏:(有,看不见)继承关系下,不同的作用域。覆盖:(不存在)派生类里面的同名函数把基类的覆盖了(相当于替换)基类和派生类的相互指向#include<iostream>using namespace std;class Base//这个类中,两个Show()是重载关系{public:...原创 2019-04-02 14:11:15 · 286 阅读 · 0 评论 -
C++:智能指针(shared_ptr)
带有引用计数的智能指针 shared_ptr 强智能指针引用计数: 有多少个智能指针对象管理这个堆内存设计类 : 引用计数管理器 智能指针图示: 赋值运算符的重载:sp1=sp2;1)sp1 sp2管理同一个内存块 delRef(); addRef();2)sp1 sp2管理不同的内存块 delRef(); ...原创 2019-03-27 17:09:59 · 574 阅读 · 2 评论 -
C++:临时量&临时对象
临时量 ·内置类型生成的临时量是常量(临时量,寄存器带出来)。 · 自定义类型生成的临时量是变量 ,在内存中。 · 隐式生成生成的临时量是常量,显式生成生成的临时量是变量 。临时对象 临时对象是系统临时分配的对象,在没主动声明所需对象而又使用其功能时产生的。何时产生临时对象: 1)以值的方式给函数传参;#i...原创 2018-12-05 09:55:40 · 898 阅读 · 0 评论 -
linux4G虚拟地址空间
在linux下编写程序,不知你是否遇到过 “Segmentation fault” ,出现这种情况大多是因为访问到了未经允许的地址。例如: linux操作系统将进程的虚拟地址空间做了如图所示的分配:思考:#include<stdio.h>int gdata1 = 10; //.data int gdata2 = 0; ...原创 2018-11-30 19:15:44 · 372 阅读 · 0 评论 -
C++:构造函数&析构函数
构造函数: C++类的目标之一是让使用类对象就像使用标准类型一样,事实上它并不能像初始化int类型那样初始化类对象,也就是说,常规的初始化语法不适用于类对象。为此,C++提供了一个特殊的成员函数——类构造函数。它是一种特殊的类成员函数,在创建类对象时被调用。通常,构造函数用于初始化对象的成员。规则: ·构造函数的名称和类名相同,通过函数重载,可以创建多个同名的构...原创 2018-12-03 09:22:37 · 597 阅读 · 0 评论 -
C++:对象的生存周期
显示对象:出现类型名 隐式对象:不出现类型名 注意:临时对象的生存周期只在本条语句,临时对象一旦被引用,它的生存周期就和引用相同。临时量 内置类型 自定义类型 隐式 常量 常量 显式 常量 变量 ...原创 2018-12-05 19:03:18 · 263 阅读 · 0 评论 -
C++:初始化列表
定义: C++中构造函数与其他函数不同的是,除了有名字,参数列表和函数体之外,还可以有初始化列表。 初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。使用原因:其一主要是性能问题,对于内置类型,如int, float等,使用初始化类表和在构造函数体内初始化差别不是很大,但是对于类类型来说,最好使用初始化列表,为什么呢?#include<iostre...原创 2018-12-29 18:39:19 · 860 阅读 · 0 评论 -
C++:const成员变量、方法
常对象只能调用常方法#include<iostream>using namespace std;class Test{public: Test(int a, int b):mb(b) { ma = a; //mb = b; } void Show() { cout << "ma:" << ma << endl;...原创 2018-12-29 22:04:55 · 457 阅读 · 0 评论 -
C++:static成员变量、方法
static 修饰成员变量、方法static 修饰成员变量不属于对象私有 ,属于对象共享 ,一定要在类外进行初始化。#include<iostream>using namespace std;class Test{public: Test(int a, int b) { mb = b; } void Show() { cout <&...原创 2018-12-31 12:25:43 · 569 阅读 · 0 评论 -
C++:函数模板
两个数求和:1)C语言泛型 void* [ )--------------半开半闭,易越界2)函数重载 ---------------------------类型有限制3)宏-------------------------------------不安全4)C++泛型----------------------适宜c++泛型用模板来实现、1.函数模板:自己定义的代码叫...原创 2019-03-11 17:33:00 · 215 阅读 · 0 评论 -
C++:类模板
零构造/零初始化:把内存单元全部初始化为0int main(){ typedef char * CHAR; char *c = CHAR(); int a = int(); double b = double(); cout << a << endl; cout << b << endl; return 0;}类...原创 2019-03-11 17:33:27 · 121 阅读 · 0 评论 -
C++:智能指针(auto_ptr)
智能指针: 在C++中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。使用普通指针,容易造成堆内存泄露,二次释放等问题,使用智能指针能更好的管理堆内存。C++11中引入了智能指针的概念,方便管理堆内存。栈、堆区别栈:系统开辟 系统释放堆:手动开辟 手动释放设计:手动开辟 系统释放图示: 手动开...原创 2019-03-20 16:54:48 · 270 阅读 · 0 评论 -
C++:函数指针调用方法
函数指针调用普通函数#include<iostream>using namespace std;void Show()//void(*)(){ cout << "void _cdecl Show()" << endl;}typedef void(*PFUNC)();//类型重定义 函数指针int main(){ cout &l...原创 2019-03-25 17:22:01 · 7963 阅读 · 0 评论 -
C++:弱智能指针(weak_ptr)
弱智能指针: 一般结合强智能指针使用,它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段;weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 不会引起引用记数的增加或减少。针对于强智能指针(shared_...原创 2019-03-29 18:11:03 · 2940 阅读 · 0 评论 -
C++:继承与多态(1)
继承:继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一。例子: 先看这样一段代码:#include<iostream>using namespace std;class A{public: A(int a=0):ma(a){}private: int ma;};class B :public A// :继...原创 2019-03-30 18:24:19 · 210 阅读 · 0 评论 -
C++:智能指针( scope_ptr)
新智能指针的加入:C++11之前,智能指针只有 auto_ptr 一种,但是后来发现它并不能很好的保证指针的安全可靠性,随之又出现了shared_ptr unique_ptr weak_ptr scope_ptr 这几种智能指针。假如存在这样的代码int main(){ SmartPtr<int> sp1(new int); Smar...原创 2019-03-26 22:15:32 · 2199 阅读 · 0 评论