C++
在下yo
这个作者很懒,什么都没留下…
展开
-
C++ 11
列表初始化在C++98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。对于一些自定义的类型,却无法使用这样的初始化。C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加。int main(){ // 内置类型变量 int x1 = {10}; int x2{10}; int x3 = 1+2; int x4 = {1+2}; int x5{1+2}; // 数组 int ar原创 2020-07-21 15:03:58 · 282 阅读 · 0 评论 -
哈希
哈希概念理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。当向该结构中:插入元素根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放搜索元素对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功该方式即为哈希(散列)方法,哈希方法中使用的转换原创 2020-07-10 16:07:11 · 177 阅读 · 0 评论 -
C++:set map
键值对用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。SGI-STL中关于键值对的定义:template <class T1, class T2>struct pair{typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair(): first(T1()), second(T2()){}pair(const原创 2020-07-05 19:49:00 · 115 阅读 · 0 评论 -
C++:RB-tree
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树的性质每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点每个叶子结点都是黑色的(此处的叶子结点指的是空结点)红黑树的插入操作按照二叉搜索的树规则插入新节原创 2020-07-02 17:34:04 · 271 阅读 · 0 评论 -
C++:AVL树
AVL tree 是一个“加上了额外平衡条件”的二叉搜索树,其平衡条件的建立是为了保证整棵树的深度为O(logN)。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:它的左右子树都是AVL树左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)AVL树节点的定义template<class T>struct AVLTreeNode{ AVLTreeNode(const T& data) : _pLeft(nullptr), _pRight(nullp原创 2020-07-01 16:52:25 · 144 阅读 · 0 评论 -
C++:二叉搜索树
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉搜索树操作二叉搜索树的查找二叉搜索树的插入树为空,则直接插入树不空,按二叉搜索树性质查找插入位置,插入新节点二叉搜索树的删除情况b:删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点情况c:删除该结点且使被删除节点的双亲结点指向被删除结原创 2020-06-30 16:38:19 · 114 阅读 · 0 评论 -
C++:多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写虚函数虚函数:即被virtual修饰的类成员函数称为虚函数。class Person {public: virtual void BuyTicket() { cout << "买票-全价"原创 2020-06-23 10:35:40 · 110 阅读 · 0 评论 -
C++:继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承定义继承方式:public 继承、 protected继承、 private继承。下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。class Person{public: vo原创 2020-06-20 20:36:43 · 97 阅读 · 0 评论 -
C++:stack和queue
stackstack的介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:标准容器vector、deque、list均符合这些需求原创 2020-06-16 16:09:13 · 1045 阅读 · 0 评论 -
C++:list
listlist是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list的构造list():构造空的listlist (size_type n, const value_type& val = value_type()):构造的list中包含n个值为val的元素list (const list& x):拷贝构造函数list (Inp原创 2020-06-15 08:17:43 · 98 阅读 · 0 评论 -
C++:vector
vectorvector是表示可变大小数组的序列容器,像数组一样采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。常用构造函数vector():无参构造vector(size_type n, const value_type& val = value_type()):构造并初始化n个valvector (const vector& x);:拷贝构造vector (InputIterator first, InputIterato原创 2020-06-14 18:02:55 · 104 阅读 · 0 评论 -
模板类string
string 类的常用构造函数string():构造空的string类对象,即空字符串string(const char* s):用C-string来构造string类对象string(size_t n, char c):string类对象中包含n个字符cstring(const string&s):拷贝构造函数int main(){ string s1; // 构造空的string类对象s1 string s2("hello bit"); // 用C格式字符串构造string类原创 2020-06-10 19:12:43 · 366 阅读 · 0 评论 -
C++:模板
函数模板●函数模板格式template<typename T1, typename T2,......,typename Tn>返回值类型 函数名(参数列表){}●函数模板的实例化1.隐式实例化:让编译器根据实参推演模板参数的实际类型template <typename Type>Type Max(Type a, Type b){ return a > b ? a : b;}int main(){ int res = Max(10, 20); i原创 2020-06-08 14:42:07 · 95 阅读 · 0 评论 -
C++:new与delete
C/C++内存分布new与delete1.申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和delete[]。2.在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数。class Test{public: Test(int a = 0) : m_a(a) {} ~Test() {}private: int m_a;};int main(){ int *p = new int;// 动态申请一个int类型的空原创 2020-06-02 13:39:04 · 104 阅读 · 0 评论 -
C++:友元
友元函数友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。class Time{ friend std::ostream & operator<<(std::ostream & os, const Time & t);//声明为友元函数private: int hours; int minutes;public: Time(); Time(int h, int m = 0)原创 2020-05-31 17:51:06 · 242 阅读 · 0 评论 -
C++:类的构造函数 析构函数 赋值函数
构造函数析构函数运算符重载原创 2020-05-29 15:28:51 · 304 阅读 · 1 评论 -
C++:初识类
类的定义class className{ // 类体:由成员函数和成员变量组成}; // 一定要注意后面的分号[注]:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。class Person{public: //公有成员,在类外可以直接被访问 void PrintPersonInfo(); private: //私有成员,在类外不能直接被访问 char m_name[20]; int m_age;原创 2020-05-27 13:06:37 · 138 阅读 · 0 评论 -
C++笔记:函数重载 引用 名称空间
1.引用1.引用在定义时必须初始化2.一个变量可以有多个引用3.引用一旦引用一个实体,再不能引用其他实体int a = 10;int &ra = a;cout << "a = " << a <<endl; // a = 10cout << "ra = " << ra << endl; //ra = 202.函数2.1函数重载函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数原创 2020-05-25 09:50:11 · 107 阅读 · 0 评论