C++
文章平均质量分 57
qq_45975614
这个作者很懒,什么都没留下…
展开
-
设计一个类,不能被继承
C++98方式:C++98中构造函数私有化,派生类中调不到基类的构造函数,则无法继承。//基类的构造函数定义为私有的class C{private: C() {}};class D :public C{};void test(){ //D d;}C++11方法:final关键字,final修饰类,表示该类不能被继承。//不能被继承的类//把类定义为final类class A final{};class B :public A{};...原创 2021-06-21 22:41:49 · 210 阅读 · 2 评论 -
设计一个类,只能在栈上创建对象
方法一:将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。//设计一个类,只能在栈上创建对象class StackObj{public: //公有的静态方法创建对象返回即可 static StackObj getObj() { return StackObj(); } //构造函数私有private: StackObj() {}};//全局的,在数据段StackObj so = Sta原创 2021-06-21 22:37:19 · 180 阅读 · 0 评论 -
设计一个类,只能在堆上创建对象
实现方式:将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。//设计一个类,只能在堆上创建对象class HeapObj{public: //提供一个静态的成员函数调用构造函数创建对象 static HeapObj* getObj() { return new HeapObj; } //禁止构造函数的调用:私有private: HeapObj() {} //防拷贝 //只声明不实现(c原创 2021-06-21 22:28:24 · 106 阅读 · 0 评论 -
关联式容器multimap
1. multimap的介绍multimap的介绍Multimaps是关联式容器,它按照特定的顺序,存储由key和value映射成的键值对<key, value>,其中多个键值对之间的key是可以重复的。在multimap中,通常按照key排序和惟一地标识元素,而映射的value存储与key关联的内容。key和value的类型可能不同,通过multimap内部的成员类型value_type组合在一起,value_type是组合key和value的键值对:typedef pair&l原创 2021-05-28 20:50:44 · 185 阅读 · 0 评论 -
关联式容器map
1. map的介绍map的介绍map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类value_type绑定在一起,为其取别名称为pair:typedef pair value_type;在内部,map中的元素总是按照键值key进行比较排序的。map中通过键值访问单个原创 2021-05-27 22:51:47 · 156 阅读 · 0 评论 -
关联式容器multiset
1. multiset的介绍multiset的介绍multiset是按照特定顺序存储元素的容器,其中元素是可以重复的。在multiset中,元素的value也会识别它(因为multiset中本身存储的就是<value, value>组成的键值对,因此value本身就是key,key就是value,类型为T). multiset元素的值不能在容器中进行修改(因为元素总是const的),但可以从容器中插入或删除。在内部,multiset中的元素总是按照其内部比较规则(类型比较)所指示的特定原创 2021-05-26 21:03:17 · 149 阅读 · 0 评论 -
关联式容器set
1. 关联式容器关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。2. 键值对用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应该单词,在词典中就可以找到与其对应的中文含义。SG原创 2021-05-26 20:39:56 · 146 阅读 · 0 评论 -
二叉搜索树的使用
1 二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树2 二叉搜索树概念#include<time.h>#include<iostream>using namespace std;template <class T>struct BNode{ T _data原创 2021-05-14 22:58:50 · 161 阅读 · 0 评论 -
二叉搜索树
1 二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树int a [] = {5,3,4,1,7,8,2,6,0,9};2 二叉搜索树操作二叉搜索树的查找二叉搜索树的插入插入的具体过程如下:a. 树为空,则直接插入b. 树不空,按二叉搜索树性质查找插入位置,插入新节点二叉搜索树的删除首原创 2021-05-13 22:42:38 · 176 阅读 · 0 评论 -
双端对列(deque)的介绍和使用
1. deque的原理介绍deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组,其底层结构如下图所示:双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落在了deque的迭代器身上,因原创 2021-04-21 20:11:55 · 437 阅读 · 0 评论 -
优先对列(priority_queue)的介绍和使用
1. priority_queue的介绍priority_queue文档介绍翻译:优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器原创 2021-04-21 15:14:33 · 376 阅读 · 0 评论 -
C++模拟实现队列
1. 队列的介绍queue的文档介绍翻译:队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用bac原创 2021-04-21 14:29:31 · 392 阅读 · 0 评论 -
栈(stack)的介绍和使用
1. stack的介绍和使用1.1 stack的介绍stack的文档介绍翻译:stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判原创 2021-04-12 11:30:38 · 1481 阅读 · 0 评论 -
C++List模拟实现
1. list的介绍及使用1.1 list的介绍list文档介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行原创 2021-04-10 11:37:49 · 77 阅读 · 0 评论 -
vector的使用
1.vector的使用vector学习时一定要学会查看文档:vector的文档介绍,vector在实际中非常的重要,在实际中我们熟悉常见的接口就可以,下面列出了哪些接口是要重点掌握的。2.vector的定义// constructing vectors#include <iostream>#include <vector>int main (){ // constructors used in the same order as described above:原创 2021-04-01 15:02:17 · 76 阅读 · 0 评论 -
vector的介绍与模拟实现
1.vector的介绍及使用1.1 vector的介绍vector介绍1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就原创 2021-03-30 17:24:11 · 213 阅读 · 0 评论 -
C++函数模板
1. 泛型编程如何实现一个通用的函数模板呢?void Swap(int& left, int& right) { int temp = left; left = right; right = temp; }void Swap(double& left, double& right) { double temp = left; left = right; right = temp; }void Swap(char& left, char& r原创 2021-03-23 16:29:51 · 72 阅读 · 0 评论 -
C++11auto关键字
1. auto简介在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量。C++11中,标准委员会赋予了auto全新的含义:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。void test(){ //auto:自动类型推导 auto a = 10; auto b = 2.0; auto c = 'a'; auto d = 'a' + b; cout << typ原创 2021-01-31 16:27:50 · 177 阅读 · 0 评论 -
C++内联函数
1. 内联函数概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。1.1 不使用内联函数的反汇编代码1.1 使用内联函数的反汇编代码2. 内联函数特性inline是一种以空间换时间的做法,省去调用函数的额外开销,所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉内联。i原创 2021-01-31 15:55:25 · 83 阅读 · 0 评论 -
C++引用
1. 引用的概念1.1 引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开存储空间它和它引用的变量共用同一块内存。类型& 引用变量名(对象名)=引用实体#include<stdio.h>int main(){ int a = 10; int& ra = a; //定义引用类型 printf("a = %d\n", a); //10 printf("ra = %d\n", ra); //10 printf("a的地原创 2021-01-30 20:35:24 · 81 阅读 · 0 评论 -
缺省参数
1. 缺省参数概念1.1 缺省参数是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。void fun1(int a){ cout << a << endl;}void fun2(int a = 10){ cout << a << endl;}void test(){ fun1(100); //100 fun2(); //10,没有传参时,使用参数的默认值 fun2原创 2021-01-29 19:24:27 · 197 阅读 · 0 评论 -
C++命名空间
1.命名空间的作用1.1 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。2.命名空间的定义2.1 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中原创 2021-01-29 17:16:33 · 63 阅读 · 0 评论