![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
1.01
这个作者很懒,什么都没留下…
展开
-
C++ reverse函数的用法
reverse函数转载 2022-07-26 20:18:26 · 1177 阅读 · 0 评论 -
友元类和友元函数
一、友元函数友元函数和普通函数最大的区别在于友元函数可以直接访问类的私有成员和保护成员;友元函数不属于类的成员函数,但是友元函数必须在类内部定义;友元函数使用friend关键词声明;友元函数能够实现类之间的数据共享,较少系统开销,提高效率,但是会破坏类的封装机制;class FriendFunc{public: FriendFunc(); ~FriendFunc(); friend void friend_function(FriendFunc f1);priva转载 2022-05-03 22:59:17 · 919 阅读 · 0 评论 -
数组指针和指针数、指针常量和常量指针关系
什么是指针数组和数组指针?指针数组:指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型数组指针:数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。根据上面的解释,可以了解到指针数组和数组指针的区别,因为二者根本就是种类型的变量。//指针数组char *arr[4] = {"abc", "abc", "a原创 2021-09-26 00:14:11 · 309 阅读 · 0 评论 -
C++中类的静态成员变量
在C语言中,我们知道有static静态变量,生命周期与作用域都跟普通变量有所不同。而在C++的类中,也有静态成员变量同时还有静态成员函数,先来看看C++中静态成员变量与静态成员函数的语法: #include <iostream>#include <string> using namespace std; class test{private: static int m_value; //定义类的静态成员变...转载 2021-09-21 00:07:49 · 13458 阅读 · 0 评论 -
c++带默认参数的函数的声明、定义及使用总结
1.c++规定默认参数必须从函数参数的右边向左边使用,如下:正确声明:void fun1(int a, int b=10);void fun2(int a, int b=10, int c=20);错误声明:void fun3(int a=5, int b, int c);void fun4(int a, int b=5, int c);2.默认参数不能在声明和定义中同时出现,如下:错误使用示范:声明:void fun1(int a=10);定义:void fun1(int a转载 2021-04-26 15:31:11 · 4409 阅读 · 2 评论 -
C++11的线程库
前言:C++ 11通过标准库引入了对多线程的支持,这个是c++的新特性之一,也就是说我们直接用即可,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念(这个后文会讲到)。线程啥的就不再解释了,直接上干货;头文件一定记得写如下几个:#include <thread> //线程库#include <condition_variable> //条件变量#include <mutex> //互斥锁1. 线程库函数的使用原创 2021-04-17 22:49:14 · 2074 阅读 · 10 评论 -
C++11 计时方法——std::chrono
前言:这个计时的话,最大的用途我觉得就是可以计算一下程序的用时。加上头文件 # include < chrono >这里简易记录一下: auto t1=std::chrono::steady_clock::now(); auto t2=std::chrono::steady_clock::now(); //秒 double dr_s=std::chrono::duration<double>(t2-t1).count();原创 2021-04-14 00:18:33 · 3438 阅读 · 0 评论 -
C++ -------------- 类的六个默认成员函数
类的六个默认成员函数:构造函数拷贝构造函数析构函数赋值运算符重载取址(&)运算符重载const修饰的取址运算符重载我们先定义一个空类:class A{};我们设置一个空类,看上去是空的,实际上在经过编译器处理之后它就不在为空,编译器会自动加入一些默认的成员函数;编译器处理之后的类相当于:class A{public: A(); //构造函数 A(const A& a); //拷贝构造函数 ~A(); //析构函数 A&am原创 2021-04-09 21:54:02 · 70 阅读 · 0 评论 -
常用字符串操作函数
字符串分类函数int isalnum(int c):检查字符是否为数字或字母;(09,az,A~Z)int isalpha(int c):检查字符是否为字母;(a~z, A~Z)int iscntrl(int c):检查字符是否为控制字符;(八进制000~037以及177的字符)int isdigit(int c):检查字符是否为十进制数字;(0~9)int isgraph(int c):检查字符是否为图形表示,依赖于使用语言的环境;09,az,A~Z,以及标点符号)int islower(i原创 2021-03-29 16:35:49 · 141 阅读 · 0 评论 -
C++ -------- atoi() 函数与stoi()函数
前言:在C++中有几个处理字符串转换数字的函数很好用,可以学习一下。atoi() 与stoi()函数都是c++的字符处理函数,把数字字符串转变为int输出头文件都是#include< cstring >那他们的区别是什么呢?atoi()的参数是const char *,因此对于字符串str我们必须调用c_str()的方法把这个string 转换成const char *类型的;stoi()的参数是const string *,可直接使用;stoi()会做范围检查,原创 2021-03-24 15:17:05 · 514 阅读 · 0 评论 -
C++中的三种智能指针分析(RAII思想)
前言:首先学习智能指针,我们得先学学RAII的思想。什么是RAII?RAII(Resource Acquisition Is Initialization)机制是Bjarne Stroustrup首先提出的,也称直译为“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的机制。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。RAII 机制就是利用了C++的上述特性,在需要获取使用资源RES的时候,构造一个临时对象(T),在其构造T时获取资源,在T生命期控制对R原创 2021-03-14 15:38:22 · 156 阅读 · 0 评论 -
C++ 图解多态分类
原创 2021-03-04 21:06:11 · 165 阅读 · 1 评论 -
C++ 内存分配情况
一个由c/C++编译的程序占用的内存分为以下几个部分栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后原创 2021-03-04 20:30:18 · 272 阅读 · 1 评论 -
C++中的左值和右值
前言:这里只是讲一下概念而已,那么怎么才能分辨出左值和右值呢?lvalue和rvalue的一个简单定义。。lvalue(locator value)代表一个在内存中占有确定位置的对象(换句话说就是有一个地址)。rvalue通过排他性来定义,每个表达式不是lvalue就是rvalue。因此从上面的lvalue的定义,rvalue是在不在内存中占有确定位置的表达式。理解C和C++中的左值和右值...原创 2021-03-03 17:28:07 · 54 阅读 · 1 评论 -
C++类内定义引用成员
前言:先来回答一个问题:C++类内可以定义引用数据成员吗?答案是肯定的,但是必须通过构造函数初始化列表初始化类内的引用!!!C++类内可以定义引用成员变量,但要遵循以下三个规则:不能用默认构造函数初始化,必须提供构造函数来初始化引用成员变量。否则会造成引用未初始化错误。构造函数的形参也必须是引用类型不能在构造函数的函数体赋值(为什么不是说初始化呢?因为所有的成员变量都是在初始化列表中完成的),必须在初始化列表中进行初始化。构造函数分为初始化和计算两个阶段,前者对应成员初始化链表,后者对原创 2021-03-03 17:05:14 · 3742 阅读 · 3 评论 -
typedef 以及 typename 的作用
在学习STL的过程当中,经常会遇到一些让人难以理解的C++代码,比如:typedef typename std::vector<T>::size_type size_type;看起来它应该是定义一个类型别名,但是typedef使用方式应该是typedef + 原类型名 + 新类型名(typedef具体使用方法可移步 typedef和#define的用法与区别 ),为何此处多了个typename?typename又是什么东西?typedef char* PCHAR;只记得泛型编程(GP转载 2021-02-28 21:42:54 · 550 阅读 · 0 评论 -
C++中vector二维的初始化
初始化二维vector,为r*c的vector,所有值为0.直接用初始化方法vector<vector > newOne(r, vector(c, 0));用resize()来控制大小 vector<vector<int> > res; res.resize(r);//r行 for (int k = 0; k < r; ++k){ res[k].resize(c);//每行为c原创 2021-02-21 15:32:35 · 1229 阅读 · 0 评论 -
c语言extern阐述
本文转载,详情请点击!1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数转载 2021-01-27 11:37:43 · 542 阅读 · 0 评论 -
C++11 新特性(转载)
转载连接,详情请点击 1、什么是C+11 C++11标准为C++编程语言的第三个官方标准,正式名叫ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++。在正式标准发布前,原名C++0x。它将取代C++标准第二版ISO/IEC 14882:2003 - Programming languages -- C++成为C++语言新标准。 C++11是对目前C++语言的扩展和转载 2020-12-12 16:32:16 · 100 阅读 · 0 评论 -
C++重载运算符-------成员访问运算符
类成员访问运算符( -> )可以被重载,但它较为麻烦。它被定义用于为一个类赋予"指针"行为。运算符 -> 必须是一个成员函数。如果使用了 -> 运算符,返回类型必须是指针或者是类的对象。运算符 -> 通常与指针引用运算符 * 结合使用,用于实现"智能指针"的功能。这些指针是行为与正常指针相似的对象,唯一不同的是,当您通过指针访问对象时,它们会执行其他的任务。比如,当指针销毁时,或者当指针指向另一个对象时,会自动删除对象。间接引用运算符 -> 可被定义为一个一元后缀运算符。也转载 2020-11-10 22:41:15 · 253 阅读 · 0 评论 -
位操作运算(转载)
位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大家梳理知识。提高篇则针对各大IT公司如微软、腾讯、百度、360等公司的笔试面试题作详细的解答,使大家能熟练应对在笔试面试中位操作题目。 下面就先来对位操作作个全面总结,欢迎大家补充。在计算机中所有数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果,正因为位操作的这转载 2020-08-03 22:40:36 · 1458 阅读 · 1 评论 -
errno、stderr、perror函数和strerror函数
errno表示错误代码。 记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。系统每一次出错都会对应一个出错代码,例如12表示“Cannot allocate memory"。stderr是linux(unix)标准出错输出。linux中的一个进程启动时,都会打开三个文件:标准输入、标准输出和标准出错处理。通常这三个文件都与终端联系。这三个文件分别对应文件描述符0、1、2。系队统自定义了三个文件指针stdin、stdout、stderr,分别指向标准输入、标准...转载 2020-08-02 10:06:36 · 2030 阅读 · 1 评论 -
类和函数模板以及特例化
一、函数模板1、定义建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定,而是用一个虚拟的类型来代替(实际上是用一个...转载 2020-08-01 19:59:56 · 427 阅读 · 0 评论 -
整行输入的实现方法(scanf,gets,getline, cin.getlien)
C++行输入的实现方法:方法一:scanf()读入char[]使用方法:char str[1024];scanf("%[^\n]",&str);getchar();说明:在scanf函数中,可以使用%c来读取一个字符,使用%s读取一个字符串, 但是读取字符串时不忽略空格,读字符串时忽略...转载 2020-07-31 20:23:58 · 764 阅读 · 0 评论 -
C++基础知识-------类型转换
前言在C语言中,我们,就知道强制类型转换和隐式类型的转换,但是这种转换其实是不太安全的,既然我们学了C++,那么我们就应该尽量使用c++的类型转换,为什么呢?因为 c++ 中类型转换的方式,他们都是通过类模板的方式实现,安全性得到保证,通过不同的用途使用不同的显示类型转换模板C语言的强制类型转换C风格的强制转换(Type Cast)容易理解,不管什么类型的转换都可以使用使用下面的方式.TypeName b = (TypeName)a;c++版本 四种强制转换类型函数const_cast主原创 2020-06-29 22:42:34 · 144 阅读 · 0 评论 -
C++--------函数try语句块
语法 函数try块是一种函数体的替代语法形式,是函数定义的一部分 try构造函数初始化器 复合语句 处理块序列 (1)构造函数初始化器 - 成员初始化器列表,只在构造函数允许 (2)复合语句 - 花括号环绕的语句序列,它组成函数体 (3)处理块列表 - 一个或多个catch子句的序列解释 函数try块将一系列catch子句与整个函数体,以及成员初始化器列表(若用于构造函数)关联起来。从函数体中的任何语句,或(对于构造函数)从任何成员或基类的构造函数,或(对于析构函数)...转载 2020-06-07 09:56:33 · 2663 阅读 · 0 评论 -
必须掌握sprintf函数的用法
这几天总遇到sprintf,下面自己来小小地总结下~srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而...转载 2020-06-06 23:21:03 · 1502 阅读 · 0 评论 -
C++------随机数算法
前言:在这里,我们要明确,计算机随机化出来的数字都是伪随机数字,就是近似于随机数,简单来说这个伪随机数需要依靠一个种子来决定这个数值的大小。默认情况下,这个种子的值是1。这造成了如果不改变种子的值,我们生成的随机数就会是同一个值。所以,我们就要设置种子C语言版本在C语言里,产生随机数主要用上两个函数,一个是srand(),另外一个是rand()函数。这个也没啥介绍的,具体看代码,就传递几个参数。rand()函数会返回一个范围在0到RAND_MAX(至少是32767,我的机器上是int的最大值)之间的原创 2020-06-05 23:23:08 · 1022 阅读 · 0 评论 -
STL----pair以及tuple
Pair类型pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如STL中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一种结构体,主要的两个成员变量是first, second头文件< utility >中已经定义了pair上的六个比较运算符:<、>、<=、>=、==、!=,其规则是先比较first,first相等时再比较second,这符合大多数应用的逻辑。原创 2020-06-04 11:50:09 · 291 阅读 · 0 评论 -
C++知识点------bitset类
bitset转载 2020-06-02 23:26:49 · 309 阅读 · 0 评论 -
C++之模板特例化
本文是转载的:https://blog.csdn.net/lisonglisonglisong/article/details/38057367 模板是C++中一个很重要的特性,写一份代码能用于多种数据类型(包括用户自定义类型)。例如,STL的sort()函数可以用于多种数据类型的排序,类stack可以用作多种数据类型的栈。但是,如果我们想对特定的数据类转载 2020-05-26 23:44:33 · 398 阅读 · 0 评论 -
虚析构函数的魅力所在
前言:什么是虚函数?简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。如果一个类有一个或者一个以上的虚函数,则该类有且只有一张虚函数表,每个类都只有一个虚函数表,该类的所有对象都共享这张虚函数表子类的虚函数表中子类的虚函数覆盖父类的虚函数的情况,当子类将父类的虚函数override时,就覆盖了父类的虚函数;满足o原创 2020-05-25 23:05:40 · 101 阅读 · 0 评论 -
虚函数表
本文转自:https://blog.csdn.net/lihao21/article/details/50688337关键词:虚函数,虚表,虚表指针,动态绑定,多态一、概述为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表每个包含了虚函数的类都包含一个虚表。 我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说转载 2020-05-24 23:29:43 · 146 阅读 · 0 评论