C++学习总结
文章平均质量分 61
c++学习总结,运行实例
I_G
这个作者很懒,什么都没留下…
展开
-
C++学习总结(二十七)——STL容器与算法(一) STL容器的组成,线性容器(array,vector,tuple,queue,deque,stack),链式容器(list)
STL容器:C++标准库的一部分,用C++ Template机制表达泛型的库,用泛型技术设计完成实例。Template特性: (1)类模板偏特化,进行严格的类型检查。 (2)默认模板参数,模板中允许用默认参数。 (3)成员模板,模板类中包含模板函数 (4)关键字typename,类型前的标识, typename T::SubType *ptr 指向T中子类型的指针 tem...原创 2018-06-02 16:17:05 · 719 阅读 · 0 评论 -
C++学习总结(二十八)——STL容器与算法(二) 集合set multiset bitset 映射 map 以及散列hash的介绍
1.集合set的基本操作集合中不能包含重复的元素,如果包含重复的元素,则将被自动剔除。同时实现自动排序红黑树容器:例如数据:1 2 3 4 5 6 7经过排序后的结果为: 4 2 6 1 3 ...原创 2018-06-02 17:05:38 · 449 阅读 · 0 评论 -
C++学习总结(二十六)——RTTI类型检查,类指针类型转换
#include<iostream>using namespace std;//rtti实时类型检测//成员变量的覆盖,静态变量也会覆盖。//class A{public: int num=0; static int data; virtual void run()//拥有虚函数, { cout << "Arun"; }};int A::da...原创 2018-05-26 11:29:56 · 585 阅读 · 0 评论 -
C++学习总结——通过抽象类和派生创建异质链表
#include<iostream>#include<Windows.h>#include<stdlib.h>using namespace std;class base//抽象基类的定义{public: virtual void show() = 0;//通过纯虚函数定义公共接口};//链表结点定义class linknode{publ...原创 2018-05-23 21:16:09 · 1291 阅读 · 0 评论 -
C++学习总结(二十三)——类模板作为模板参数,类模板与静态变量静态函数,类模板的嵌套,类模板函数包装器
一.类模板当做模板的参数#include<iostream>#include<string>using namespace std;//类模板当做一个类的参数template<class T>class ren //一个通用的类模板{ public: T name; ren(T t):name(t) { }};template&l...原创 2018-04-29 22:05:43 · 857 阅读 · 1 评论 -
C++学习总结(二十四)——类模板元编程,类模板重载
一.类模板元编程#include<iostream>template<int N>struct data{ enum { res = data<N - 1>::res + data<N - 2>::res};};template<>struct data<1>{ enum{res=1};};templat...原创 2018-04-29 22:16:32 · 451 阅读 · 0 评论 -
C++ 学习总结(二十五)——流类库
一. 流类库的结构组成:1.流类库都派生于同一个基类: class streambuf派生类: filebuf(文件缓存区) strstreambuf(字符串缓存区) stdiobuf(标准输入输出缓存区)2.基类: ios派生类: ...原创 2018-05-21 22:14:49 · 1138 阅读 · 0 评论 -
C++ 学习总结(二十一)——类模板与模板类的特点,类模板的继承方式以及的继承特点
一.类模板类模板通过实例化以后的对象被称为模板类1.类模板定义,类模板中的成员函数定义时,如果在外部定义,则需要加上类模板描述。#include<iostream>#include<vector>using namespace std;//函数模板template<typename T>T add(T a, T b){ return a + b;...原创 2018-04-28 22:35:43 · 1563 阅读 · 0 评论 -
C++学习总结(二十二)——类模板与友元(友元函数,友元类模板)
一.类模板与友元当友元函数在外部定义时,友元函数以及所属的类必须声明。 友元函数放在类模板的内部时,友元函数可以直接调用,无需加类限定符。#include<iostream>#include<string>#include<vector>using namespace std;template<class T>class A{ pu...原创 2018-04-29 21:21:10 · 638 阅读 · 0 评论 -
C++学习总结(十九)——类指针与引用
在用new delete操作类指针时,会自动调用类的构造和析构函数。而 molloc 与 free不会自动调用。#include<iostream>class myclass{public: int x=1; int y=2;public: void printxy(); myclass(int a, int b) :x(a), y(b) { std::cout ...原创 2018-04-14 11:06:46 · 355 阅读 · 0 评论 -
C++学习总结(二十)——虚函数,虚函数的重载特性,纯虚函数抽象类,虚函数表,异质链表
虚函数:虚函数相当于函数指针,占用四个字节(对于32位),在类中虚函数占用四个字节,其成员函数不占类的内存。基类定义虚函数,优先调用子类中的同名函数,覆盖虚函数。基类指针访问不同派生对象,调用不同方法。注意:1.虚函数必须是类的成员函数 2.不能将友元函数说明为虚函数,但是虚函数可以是另一个类的友元。 3.析构函数可以是虚函数,但是构造函数不能是虚函数。#inclu...原创 2018-04-21 21:03:04 · 1242 阅读 · 0 评论 -
C++学习总结(十七)——联编与类成员函数的重载
一.联编包括:静态联编:连接在编译阶段实现,列如:重载函数动态联编:运行时进行,switch,if语句#include<iostream>#include<stdlib.h>//重载void go(int num){}void go(char *str){}//classclass A{public: void go() { std::c...原创 2018-04-13 22:21:26 · 228 阅读 · 0 评论 -
C++学习总结(十八)——类与类指针(子类指针与父类指针的指向问题,dynamic_cast与static_cast进行指针类型转换时的特点),类成员函数指针,类成员函数指针数组
一.类与类指针引用指向子类对象父类对象父类指针只能引用父类中的对象 fu *p=new zi;正常引用 fu *p=new fu;子类指针覆盖父类的同名函数 zi *p=new zi;子类不涉及内数据的会调用成功,执行成功。涉及内部数据的调用成功,执行失败,对于函数引用中,同名函数应加类说明。注意:在使用new和delete创建删除对象时,有如下情况:1. fu *pfu=new zi; //调用...原创 2018-04-14 10:49:59 · 961 阅读 · 0 评论 -
数据结构——树与二叉树的性质,二叉树的创建,遍历,插入,打印,查找左右兄弟等
#include<iostream>#include<string>#include<stack>using namespace std;#define MAX(x,y) (x) >= (y)?(x):(y)/*结点的层次:从根到该结点的层数(根节点算第一层)终端结点:度为0的结点,即叶子分支结点:除树根结点以外的结点,也称内部结点...原创 2018-03-19 16:13:30 · 495 阅读 · 0 评论 -
C++学习总结——vector容器的实现
//myvector.h#pragma oncetemplate<class T>class myvector{public: myvector(); ~myvector(); void push_back(T t); T* find(T t); void show(); void change(T* pos, T t); void del(T t); voi...原创 2018-03-31 22:13:28 · 273 阅读 · 0 评论 -
C++学习总结——顺序存储,链式存储,索引存储,哈希存储的优缺点,以及vector数组,list链表,十字链表,索引结构,hash表的实现
1.顺序存储 平均时间复杂度为O(n) 空间复杂度为O(0)查找,删除,增加的时间复杂度为O(0),修改的时间复杂度为O(1)优点:存储空间紧凑,容易进行查找缺点:插入删除需要移动大量元素。需要分配大量空间2.索引存储元素个数为M 索引数为N 查找的时间复杂度为O(M/N) 插入删除增加的时间复杂度为O(1) 本质为一个指针数组,数组的每一个元素可以是动态数组,链表,树或者图#pra...原创 2018-04-03 21:47:57 · 2558 阅读 · 0 评论 -
C++学习总结(十六)——类的继承,多继承,虚基类的继承
类的继承:1,类与类之间的关系:1>包含关系:类作为数据成员 2>一个类部分使用另一个类的数据成员和方法,通过定义友元 3>继承:传递关系,继承包含单继承和多继承2.继承的分类:1>公有继承: 基类的公有成员——>派生类的公有成员。继承...原创 2018-03-17 23:00:06 · 842 阅读 · 0 评论 -
C++学习总结(十 五)——类的类型装换方法
类与类间的数据类型转换方法有两种一.通过类的构造函数进行类与类间的数据类型装换二.使用转换函数进行数据类型的装换。X::operator T(){return T;}将X类型的对象装换为T类型的对象,装换函数没有参数,没有返回类型,但是必须用return 返回T类型对象,且该函数只能成为成员函数,不能为友元。#include<iostream>class complex{publ...原创 2018-03-11 17:04:33 · 436 阅读 · 0 评论 -
C++学习总结(十四)——类的运算符的重载原理,以及重载的实例
一.运算符重载原理1.运算符重载,对运算符做出新的解释。2.原有的基本语义不发生变化(优先级,结合性,操作数),且不能创建新的运算符。3.运算符可以重载为友元函数和成员函数,友元函数用于不同类的数据类型相加。二.重载实例1.输入输出流的重载输入输出重载需要定义为友元,并且引用流返回流。#includeclass fushu{public: int x=0;原创 2018-01-30 19:18:15 · 510 阅读 · 0 评论 -
C++学习总结(十三)——类中的指针与引用,以及new,delete的原理
一.类中的指针与引用的用法改变指针指向有两种方式:1.通过二级指针改变一级指针的指向。2.通过引用的方式改变指针的指向。#includeclass myclass{public: int x=1; int y=2;public: void printxy(); myclass(int a, int b) :x(a), y(b) { std::cout << "clas原创 2018-01-30 18:41:34 · 879 阅读 · 0 评论 -
C++学习总结(十二)——友元函数,友元类
一.友元函数用于访问私有数据和私有函数。#include#includeclass myclass {private: int num=0; void go() { system("notepad"); } void friend showdata(myclass *m) { m->go(); std::cout num << std::endl; }原创 2018-01-29 20:41:48 · 293 阅读 · 0 评论 -
C++学习总结(十一)——类的静态函数,成员函数的默认参数,类中包含引用和常量
一.类的静态成员变量,以及静态函数。静态成员变量:1.静态成员共享机制2.静态成员局部属于类,它不是对象的成员,位于静态区。3.静态成员变量需要在外部进行初始化。静态函数:1.静态成员函数都在代码区,类的静态函数都是共享的。2.类的大小不包含代码区,创建指向类方法的指针,需要指定所属的类。如有类函数void go();想要创建指向该函数的指针,则创建方式如下:cla原创 2018-01-28 21:55:57 · 2650 阅读 · 0 评论 -
C++ 学习总结(十)——C++类与对象,及构造函数,析构函数,拷贝构造函数
一.C++类与对象1.基本单位是类。2.类是数据和操作数据的函数的封装。3.对象使用自己的方法完成对数据的操作。4.类可以隐藏数据和操作细节,对象通过类结构与外部通信。C++与C进行代码重用是通过类和函数来实现的。C++同时可以通过类来限定数据访问得的权限。C++通过类的继承实现代码重用,类的封装实现权限封装,数据与代码合为一体。类的多态实现一个接口的多个功能。通过接口封装原创 2018-01-28 20:59:13 · 412 阅读 · 0 评论 -
C++学习总结(一)
一.C++的特点1>强类型 (C语言的类型检查弱)注重类型,严格检查类型匹配 例如: C: int *p1; C++: int *p1; double *p2; doub原创 2017-12-30 17:30:30 · 593 阅读 · 0 评论 -
C++学习总结(二)
一.左值与右值左值一般可以取地址,右值某些情况可以,某些情况不可以。左值就是可以放在赋值号左边被赋值的值,必须要在内存有实体。右值放在赋值号右边取出值赋值给其他变量的值。右值可以在内存中也可以在cpu。右值的引用,省去了去寄存器(寄存器不可取地址)到内存的拷贝,直接在寄存器中进行数据操作,节约了内存,内存优化,左值通过 std::move(变量名); 转换为右值。#incl原创 2018-01-04 13:07:59 · 207 阅读 · 0 评论 -
C++学习总结(三)——const常量
一.C与C++的const区别:C语言中,const可以被修改,可以读写,但是不可以作为数组的长度进行初始化数组。const int num=5;int *p=#C++,const、可以定义数组,可用于限定权限,指向常量的指针变量不会严格检查类型。const int num=5;int a[num]={0];int *p=&num//fault,不可取地址而且可以去掉const属性,原创 2018-01-14 12:34:07 · 324 阅读 · 0 评论 -
C++学习总结(四)
一.new delete用法int *p=new int[80];//通过new申请内存空间int (*px)[10]=((int *)[10])p;1.new只能分配线性内存。2.基本数据类型可以直接delete,复杂的如,数组,对象数组应包含delete []p; delete只能释放一次,释放后指向一个安全的地址。二.函数重载原理1.函数重载根据,参数类型不同原创 2018-01-18 13:00:04 · 210 阅读 · 0 评论 -
C++学习总结(五)——结构体(struct),联合体(union)
一.C与C++的对比C语言:1.结构体内部不能包含函数。2.变量声明时必须加上struct。3.内部变量没有公有私有的区别。#define _CRT_SECURE_NO_WARNINGS#include#include#include/*C语言结构体内部不能包含函数C语言变量声明时必须加上StructC语言内部的变量没有公有私有*/struct mystruct原创 2018-01-21 20:41:50 · 1524 阅读 · 0 评论 -
C++学习总结(六)——函数模板
函数模板的一般形式:templateT max(T *p,const int n){ }一.不限定参数的函数模板#include#include#include//template NT sum(NT count,...) // 累加template NT sum(int count,NT data1...) // 累加{ va_list arg_ptr;//参数列表指针原创 2018-01-21 21:43:07 · 267 阅读 · 0 评论 -
C++学习总结(七)——函数包装器及函数指针的使用
一.函数包装器#include#includetemplateT run(T v, F f)//数据类型,函数{ static int count = 0;//限定同一个函数的调用次数 count++; std::cout << "执行" << count << std::endl; if (count > 1) { T vx(0); return vx; } r原创 2018-01-21 22:22:57 · 530 阅读 · 0 评论 -
C++学习总结(八)——C++类型装换,inline内联函数
一.C++类型转换1.static_cast(转换数据) 用于一般数据类型转换。2.常量不能修改,const int num=10; 可以修改不生效,直接从常量表中读取,通过const_cast3.指针进行数据类型转换,类型决定了数据解析方式。地址与指针间转换。reinterpret_cast(转换数据的引用地址)。4.类的指针的转换,dynamic_cast二.inline内原创 2018-01-22 22:53:34 · 182 阅读 · 0 评论 -
C++学习总结(九)——C++数组array vector tuple
C++新类型数组:1.array静态数组大小在定义时固定,位于栈上。 #include#include#includevoid main1(){ double db[4] = {1.1,2.2,3.3,4.4}; std::array dbnew = { 10.1,10.2,10.3 }; for (auto a:dbnew) { std::cout <<a<<原创 2018-01-23 12:43:44 · 1503 阅读 · 0 评论