
C++
蜗 @牛
没有简介
展开
-
C++面试题分享
在牛客网偶然间翻到的一个大佬总结的有关C++面试题的一个专栏,该专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,总结出了高频面试考点(附有答案)共计273道,。在这里给大家分享一下。链接:https://blog.nowcoder.net/zhuanlan/v0E5P0...原创 2021-03-15 16:08:37 · 178 阅读 · 0 评论 -
传值、传引用、传地址的比较
传值优点:可以对外部实参进行保护缺点:无法通过形参对外部实参进行改变,因为形参是外部实参的一 份拷贝,在函数中对形参的修改实际是对实参的拷贝进行改变。传值的效率低下,而且有额外空间消耗。传地址优点:可以通过形参改变实参的内容;不需要对实参进行拷贝,效率高,节省空间。缺点:在不用通过形参改变实参时,代码安全性不高,可用const参数避免;传地址使用指针,所以每次使用是都需要进行判空,影响代码可读性。传引用优点:形参就是实参的别名,因此对形参的所有操作都是作用在实原创 2020-11-21 13:19:20 · 418 阅读 · 0 评论 -
C++知识点总结(四)
1、C++异常。异常是一种处理错误的方式,当一个函数发现了自己无法处理的错误时就可以抛出异常,让函数直接或间接的调用者去处理这个错误。throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理问题的地方,通过异常处理程序捕获异常.catch 关键字用于捕获异常,可以有多个catch进行捕获。try: try 块中的代码代表着将被激活的特定异常,它后面通常跟着一个或多个 catch 块。2、异常的抛出与匹配机制。异常是通过抛出对象而引原创 2020-08-13 11:13:57 · 157 阅读 · 0 评论 -
C++知识点总结(三)
1、什么是二叉搜索树?二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉搜索树中序遍历是有序的。2、map和set的底层实现是什么?map和set的底层实现都是红黑树。map中的元素是<key,value>键值对,而set的元素只有key。两者都是键值有序的,并且两者都不允许出现键值重复。3、map和set原创 2020-08-12 09:36:42 · 260 阅读 · 1 评论 -
C++知识点总结(二)
1、resize和reserve的区别?resize()调整容器的长度大小,使其能容纳n个元素。resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字 符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。原创 2020-08-11 10:20:39 · 163 阅读 · 0 评论 -
关键字知识点总结
一、关键字1、static全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.存储位置:静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。存储位置:静态存储区初始化:未经初始化的静态变量会被自动初始化为0作用域:作用域仍为局部作用域,当定义它原创 2020-08-06 10:35:20 · 352 阅读 · 0 评论 -
C++知识点总结(一)《类和对象、动态内存》
1、C与C++的区别?设计思想上:C++是面向对象的语言,而C是面向过程的结构化编程语言语法上:C++具有封装、继承和多态三种特性C++支持函数重载和缺省参数关键字个数也不同2、什么是面向过程?什么是面向对象?面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;(自顶向下,逐步细化)面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为,面向对象是以功能来划分问题原创 2020-08-10 10:13:58 · 231 阅读 · 0 评论 -
c++——哈希
概念哈希是一种搜索数据结构,不过哈希搜索不同于顺序搜索和二叉搜索的是:哈希可以不经过任何比较,一次直接从表中得到要搜索的元素。它是通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数就可以直接找到该元素。哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表 (Hash Table)(或者称散列表) 。哈希冲突哈希函数设置为:hash(key) = key % capacity; capacity为存储元素底层空间的大小。原创 2020-07-15 10:47:45 · 2303 阅读 · 0 评论 -
c++——map和set
键值对用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值, value表示与key对应的信息。就好比字典中的中英对照。一、setset文档介绍特性1、set的底层实现是通过红黑树实现的。2、 set是按照一定次序存储元素的容器 。3、在set中,元素的key(value)必须是唯一的,所以它具有去重的特性。set中的元素不能在容器中进行修改,但是可以从容器中插入或删除它们。4、在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特原创 2020-07-12 17:40:07 · 763 阅读 · 0 评论 -
c++——红黑树
一、红黑树的概念红黑树是一种二叉搜索树,但是每个结点都有表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的二叉搜索树。二、红黑树的特性1、每个节点要么是黑色,要么是红色。2、根节点是黑色。3、每个叶子节点(NIL)是黑色。4、每个红色结点的两个子结点一定都是黑色。5、任意一结点到每个叶子结点的路径都包含数量相同的黑结点。三、红黑树的实现1、红黑树的插入(1)根节点为空,则直接插入原创 2020-07-10 17:44:32 · 342 阅读 · 0 评论 -
AVL树(平衡二叉树)
一、AVL树简介AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树...转载 2020-07-08 15:52:26 · 826 阅读 · 0 评论 -
二叉搜索树解析
一、二叉搜索树二叉搜索树又被叫做二叉排序树,它可以是一棵空树,也可以是具有以下性质的二叉树:1、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 。2、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 。3、它的左右子树也分别为二叉搜索树。二、二叉搜索树的构建1、二叉搜索树的插入对于一棵二叉搜索树来说,它的插入原则分为两种情况。(1)、当树是空树时,直接插入即可,该节点即为头节点。(2)、当树不是空树时,则需要按照二叉搜索树的性质进行插入。即:比当前节点小,放入当前节原创 2020-07-08 12:09:53 · 305 阅读 · 0 评论 -
多线程编程基础
一直对多线程编程这一块很陌生,决定花一点时间整理一下。os:ubuntu 10.04 c++1.最基础,进程同时创建5个线程,各自调用同一个函数#include <iostream>#include <pthread.h> //多线程相关操作头文件,可移植众多平台 using namespace std; #define NUM_THREADS 5 //线程数 void* say_hello( void* args ){ cout << "转载 2020-07-06 17:12:10 · 237 阅读 · 0 评论 -
c++——多态
一、多态的概念简单来说,多态就是不同的对象做相同的事件有不同的结果和状态。二、多态的分类1、静态多态(重载)比如说函数重载: //进行加法运算int Add(int x,int y){ return x+y;}double Add(double x,double y){ return x+y;}int main(){ int a=1; int b=2; double c=1.0; double d=2.0; cout<&l原创 2020-07-03 16:44:27 · 434 阅读 · 0 评论 -
c++——继承
一、继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它可以让程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类,而被继承的类则称为基类。//A:基类class A{public: int _b;};//B:派生类class B : public Base{public: int _d;};通过继承的方式,可以将基类的成员都变为了派生类的一部分。二、继承方式派生类的定义为:派生类类名 : 继承原创 2020-06-30 15:58:46 · 146 阅读 · 0 评论 -
C++模板的特化
概念模板的特化不同于模板的实例化,而是在原模板的基础上,针对一些特殊类型参数所实现的特殊方式。一、函数模板特化模板函数特化形式如下:1、关键字template后面直接接一对空的尖括号<>,不需要写入类型2、必须要有一个原函数模板3、函数名<特化类型>(特化类型 参数1, 特化类型 参数2 , …) 在函数名后跟<>其中写要特化的类型4、函数形参表:即函数参数要和模板函数的基础参数类型相同template<class T>bool Test(T原创 2020-06-23 21:29:18 · 506 阅读 · 0 评论 -
模板
在编程过程中,如果要实现一个参数不同的函数来实现相同的功能。我们都知道可以通过函数重载来进行实现。但是,如果需要实现的函数过多的时候,再使用函数重载就会显得很麻烦。因为重载的函数代码基本上都是相同的,使得代码复用率不高。因此,我们就引入了模板这一概念。一、函数模板顾名思义,在这里插入代码片函数模板就是用来实现参数不同时的相同函数。函数模板与参数类型无关,会根据使用时的参数类型来产生不同的函数版本。函数模板就相当于是一个模具,它将我们所给的不同类型参数生成对应不同参数类型的函数来供我们进行使用。模板格原创 2020-06-16 21:21:26 · 137 阅读 · 0 评论 -
malloc和new的区别
malloc/free和new/delete都是用来申请动态内存和释放内存的,它们都是在堆上申请的的空间,在大部分情况下是通用的。并且虽然new/delete的底层实现也是通过malloc/free实现的但是它们两者之间是有着极大的不同的。1、malloc/free是函数,而new/delete则是操作符。2、malloc只负责申请空间而不会初始化,而new不但可以开辟空间,还可以进行初始化。要注意的是new/delete申请和释放的是单个元素的空间,new[]和delete[]申请和释放的是连续空间。原创 2020-05-12 14:29:07 · 387 阅读 · 0 评论 -
构造函数和析构函数
一、构造函数构造函数:构造函数是类的一个特殊的成员函数,名字与类名相同,创建类的类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。构造函数是特殊的成员函数,构造函数的主要任务而是初始化对象。特点:1.构造函数的函数名与类名相同。2.没有返回值。3.对象实例化时编译器会自动调用对应的构造函数。4.构造函数可以重载。5. 如果类中没有...原创 2020-05-03 16:21:09 · 1267 阅读 · 0 评论 -
C与C++的几点不同
一、命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突,namespace关键字的出现就是针对这种问题的。一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中命名空间定义:定义命名空间,需要使用到namespace关键字,后面跟命名空间的...原创 2020-04-28 10:37:50 · 148 阅读 · 0 评论