18.C++学习专题
文章平均质量分 76
c++学习与开发
透明水晶
这个作者很懒,什么都没留下…
展开
-
C++ | C++11 指针
C++ | C++11 unique_ptr智能指针std::unique_ptr作为智能指针的一种,unique_ptr 指针自然也具备“在适当时机自动释放堆内存空间”的能力。和 shared_ptr 指针最大的不同之处在于,unique_ptr 指针指向的堆内存无法同其它 unique_ptr 共享,也就是说,每个 unique_ptr 指针都独自拥有对其所指堆内存空间的所有权。这也就意味着,每个 unique_ptr 指针指向的堆内存空间的引用计数,都只能为 1,一旦该 unique_ptr原创 2021-10-25 16:44:00 · 324 阅读 · 0 评论 -
C++ | C++ STL vector容器详解(序列)
C++ | C++ STL vector容器详解vector 容器是 STL 中最常用的容器之一,它和 array 容器非常类似,都可以看做是对 C++ 普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。vector 常被称为向量容器,因为该容器擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1);而对于在容器原创 2021-10-10 00:09:22 · 373 阅读 · 0 评论 -
C++ | C++ STL pair用法详解
C++ | C++ STL pair用法详解<"c" , "c language"><"java" , "Java language"><"python" , "Python language">如上所示,每行都表示一个键值对,其中第一个元素作为键(key),第二个元素作为值(value)。**注意:**基于各个关联式容器存储数据的特点,只有各个键值对中的键和值全部对应相等时,才能使用 set 和 multiset 关联式容器存储,否则就要选用 map 或者原创 2021-10-08 23:55:36 · 315 阅读 · 0 评论 -
C++ | C++ 11 Auto 类型推导
文章目录C++ | C++ 11 Auto 类型推导`auto` 类型推导的语法和规则实例1实例2(连续定义多个变量)`auto` 的高级用法实例3示例4(`auto`和`const`的结合)`auto` 的限制实例5(不能定义数组)实例6(不能作用于模板参数)auto 的应用使用 auto 定义迭代器实例7auto 用于泛型编程实例8实例9C++ | C++ 11 Auto 类型推导在 C++11 之前的版本(C++98 和 C++ 03)中,定义变量或者声明变量之前都必须指明它的类型,比如 int、原创 2021-10-08 22:12:58 · 286 阅读 · 0 评论 -
C++ | C++ STL关联式容器
C++ | C++ STL关联式容器C++ 容器大致分为 2 类,即序列式容器和关联式容器。其中,序列式容器(包括 array、vector、list、deque 和 forward_list)。C++ STL关联式容器序列式容器,其存储的都是 C++ 基本数据类型(诸如 int、double、float、string 等)或使用结构体自定义类型的元素。std::vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};//存储 int 类型元素的原创 2021-10-05 09:39:04 · 125 阅读 · 0 评论 -
C++ | C++ 11 Lambda表达式
C++ 11 Lambda表达式lambda 源自希腊字母表中第 11 位的 λ,在计算机科学领域,它则是被用来表示一种匿名函数。所谓匿名函数,简单地理解就是没有名称的函数,又常被称为 lambda 函数或者 lambda 表达式。lambda匿名函数的定义[外部变量访问方式说明符] (参数) mutable noexcept/throw() -> 返回值类型{ 函数体;};static const auto callback = [browseType](std::vecto原创 2021-09-30 19:50:19 · 88 阅读 · 0 评论 -
C++ | C++ STL array容器(序列)
文章目录C++ | C++ STL array容器C++ array(`STL array`)容器用法详解`array`容器成员函数汇总实例1C++ STL array随机访问迭代器`array` 支持迭代器的成员函数`begin()/end()` 和 `cbegin()/cend()`实例2`rbegin()`/`rend()` 和 `crbegin()`/`crend()`实例3C++ STL `array`容器访问元素的几种方式访问array容器中单个元素访问array容器中多个元素C++ | C+原创 2021-09-28 23:50:47 · 465 阅读 · 0 评论 -
C++序列式容器(STL序列式容器)
C++序列式容器(STL序列式容器)所谓序列容器,即以线性排列(类似普通数组的存储方式)来存储某一指定类型(例如 int、double 等)的数据,需要特殊说明的是,该类容器并不会自动对存储的元素按照值的大小进行排序。序列容器大致包含以下几类容器:array<T,N>(数组容器):表示可以存储 N 个 T 类型的元素,是 C++ 本身提供的一种容器。此类容器一旦建立,其长度就是固定不变的,这意味着不能增加或删除元素,只能改变某个元素的值;vector<T>(向量容器):用来原创 2021-09-28 00:23:00 · 237 阅读 · 0 评论 -
STL迭代器(iterator)用法详解
C++ STL迭代器(iterator)用法详解无论是序列容器还是关联容器,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用“迭代器(iterator)”来实现。那么,迭代器到底是什么呢?我们知道,尽管不同容器的内部结构各异,但它们本质上都是用来存储大量数据的,换句话说,都是一串能存储多个数据的存储单元。因此,诸如数据的排序、查找、求和等需要对数据进行遍历的操作方法应该是类似的。既然类似,完全可以利用泛型技术,将它们设计成适用所有容器的通用算法,从而将容器和算法分离开。但实现此目的原创 2021-09-27 17:17:10 · 1199 阅读 · 0 评论 -
C++ | C++ STL入门及C++11特性学习
STL教程:C++ STL快速入门(非常详细)第1章 STL基础C++ STL是什么,有什么用?C++ STL的发展历程是怎样的?C++ STL版本有哪些?熟练使用STL标准库是每个C++程序员的必备技能!泛型是什么,C++泛型编程又是什么?C++ STL基本组成(6大组件+13个头文件)如何衡量一个算法的执行效率?GNU开源精神及其发展历程第2章 STL序列式容器C++ STL容器是什么?迭代器是什么,C++ STL迭代器(iterato原创 2021-09-27 09:41:25 · 479 阅读 · 0 评论 -
C++ | C++多线程编程
C++ | C++多线程编程C++ 多线程多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。基于进程的多任务处理是程序的并发执行。基于线程的多任务处理是同一程序的片段的并发执行。创建线程PTHREAD_CREATE(3) Linux Programmer's Manual PTHREAD_CREATE(3)NAME pthread_create -原创 2021-09-25 22:25:33 · 2918 阅读 · 1 评论 -
C++ | C++ 的关键字(保留字)
C++ | C++ 的关键字(保留字)1. asmasm (指令字符串):允许在 C++ 程序中嵌入汇编代码。2. autoauto(自动,automatic)是存储类型标识符,表明变量"自动"具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。3. boolbool(布尔)类型,C++ 中的基本数据结构,其值可选为 true(真)或者 false(假)。C++ 中的 bool 类型可以和 int 混用,具体来说就是 0 代表 false,非 0 代表 true原创 2021-09-23 20:24:41 · 178 阅读 · 0 评论 -
C++ | C++ 信号处理
C++ | C++ 信号处理C++ 信号处理信号是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C产生中断。有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 <csignal> 中。信号描述SIGABRT程序的异常终止,如调用 abort。SIGFPE错误的算术运算,比如除以零或导致溢出的操作原创 2021-09-21 13:00:32 · 822 阅读 · 0 评论 -
C++ | C++ 多文件编程1
C++ | C++ 多文件编程1事实上,一个完整的 C++ 项目常常是由多个代码文件组成的,根据后缀名的不同,大致可以将它们分为如下 2 类:.h (.hpp)文件:又称“头文件”,用于存放常量、函数的声明部分、类的声明部分;.cpp 文件:又称“源文件”,用于存放变量、函数的定义部分,类的实现部分。实际上,.cpp 文件和 .h 文件都是源文件,除了后缀不一样便于区分和管理外,其他的几乎相同,在 .cpp 中编写的代码同样也可以写在 .h 中。之所以将 .cpp 文件和 .h 文件在项目中承担原创 2021-09-21 12:31:18 · 532 阅读 · 0 评论 -
C++ | C++模板
C++ | C++模板模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或者函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,使用的是模板的概念。每个容器都有一个单一的定义,比如向量,我们可以定义许多不同类型的向量,比如vector 或vector 。函数模板// type是函数所使用的数据类型的占位符名称,这个名称可以在函数定义中使用。template <typename type> ret-type func func-nam原创 2021-09-20 23:58:00 · 135 阅读 · 0 评论 -
C++ | C++命名空间
C++ | C++命名空间C++命名空间一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。例如小李和小韩都参与了一个文件管理系统的开发,它们都定义了一个全局变量 fp,用来指明当前打开的文件,将他们的代码整合在一起编译时,很明显编译器会提示 fp **重复定义(Redefinition)**错误。为了解决合作开发时的命名冲突问题,C++ 引入了**命名空间(Nam原创 2021-09-16 22:37:02 · 254 阅读 · 0 评论 -
C++ | C++动态内存
C++ | C++动态内存C++动态内存栈:在函数内定义的变量,都将在栈中分配内存空间。堆:这是程序未使用的内存空间,在程序运行过程中可以动态分配。很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。这种运算符即 new 运算符。如果您不再需要动态分配的内存空间,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。m原创 2021-09-15 23:27:52 · 198 阅读 · 0 评论 -
C++ | C++异常处理
C++ | C++异常处理C++ 异常处理异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw。throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个原创 2021-09-13 19:58:06 · 581 阅读 · 0 评论 -
C++ | C++函数的重载
C++ | C++函数的重载C++函数的重载C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。实例1:/******************************************************************* * > File Name: classOverload.cpp * > Create Time: 2021年09月13日原创 2021-09-13 15:16:13 · 156 阅读 · 0 评论 -
C++ | C++文件和流
C++ | C++文件和流C++ 文件和流到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它定义了三个新的数据类型:数据类型描述ofstream该数据类型表示输出文件流,用于创建文件并向文件写入信息。ifstream该数据类型表示输入文件流,用于从文件读取信息。fstream该数据原创 2021-09-10 16:31:11 · 209 阅读 · 0 评论 -
C++ | C++对象的内存模型
C++ | C++对象的内存模型类是创建对象的模板,不占用内存空间,不存在于编译后的可执行文件中;而对象是实实在在的数据,需要内存来存储。对象被创建时会在栈区或者堆区分配内存。编译器会将成员变量和成员函数分开存储:分别为每个对象的成员变量分配内存,但是所有对象都共享同一段函数代码。如下图所示:实例1:/******************************************************************* * > File Name: classStud原创 2021-09-09 11:04:45 · 1192 阅读 · 0 评论 -
C++ | C++多态、虚函数、纯虚函数
C++ | C++多态C++ 多态多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。实例1/******************************************************************* * > File Name: classPolymorphism.cpp * > Create Time: 2021年09月原创 2021-09-08 13:38:51 · 186 阅读 · 1 评论 -
C++ | C++ 重载运算符和重载函数
C++ | C++ 重载运算符和重载函数C++ 重载运算符和重载函数C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。C++ 中的函数重载在同一个作用域内,可以声明几个功能类似原创 2021-09-05 23:03:58 · 817 阅读 · 1 评论 -
C++ | C++ 继承
C++ | C++ 继承C++继承面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。基类 & 派生类一个类可以派生自多个类,这意味着,原创 2021-09-05 08:21:30 · 98 阅读 · 0 评论 -
C++ | C++ 类 & 对象 | 类的静态成员
C++ | C++ 类 & 对象 | 类的静态成员C++类的静态成员可以使用 static 关键字来把类成员定义为静态的。当声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面的实例所示。实例1:/********原创 2021-09-03 17:42:55 · 131 阅读 · 0 评论 -
C++ | C++ 类 & 对象 | 指向类的指针
C++ | C++ 类 & 对象 | 指向类的指针C++ 指向类的指针一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。实例1:/******************************************************************* * > File Name: classPointer.cpp *原创 2021-09-03 15:12:43 · 233 阅读 · 0 评论 -
C++ | C++ 类 & 对象 | this 指针
C++ | C++ 类 & 对象 | this 指针C++ this 指针在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。实例1:/******************************************************************* * > File N原创 2021-09-03 14:31:24 · 171 阅读 · 0 评论 -
C++ | C++ 类 & 对象 | C++内联函数
C++ | C++ 类 & 对象 | C++内联函数C++ 内联函数C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符。在类定原创 2021-09-03 13:34:36 · 132 阅读 · 0 评论 -
C++ | C++ 类 & 对象 | C++ 友元函数
C++ | C++ 类 & 对象 | C++ 友元函数C++ 友元函数类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:class Box{ dou原创 2021-09-03 12:50:12 · 134 阅读 · 0 评论 -
C++ | C++ 类 & 对象 | C++ 拷贝构造函数
C++ | C++ 类 & 对象 | C++ 拷贝构造函数拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下:classname (const classn原创 2021-09-03 11:00:39 · 109 阅读 · 0 评论 -
C++ | C++ 类 & 对象 | 类构造函数 & 析构函数
C++ | C++ 类 & 对象 | 类构造函数 & 析构函数类的构造函数类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。实例1:/******************************************************************* * > File Name: classConstructo原创 2021-09-02 22:52:47 · 86 阅读 · 0 评论 -
C++ | C++ 类 & 对象
C++ | C++ 类 & 对象C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。C++ 类定义定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。class BOX原创 2021-09-02 21:50:05 · 276 阅读 · 0 评论 -
C++ | C++数据结构(struct)
C++ | C++数据结构C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。定义结构为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:struct type_name{ member_type1 member_name1; member_type2 member_name2; member_type3 mem原创 2021-09-02 11:52:20 · 2013 阅读 · 0 评论 -
C++ | C++日期&时间
C++ | C++日期&时间C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 头文件。有四个与时间相关的类型:clock_t、time_t、size_t 和 tm。类型 clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数。结构类型 tm 把日期和时间以 C 结构的形式保存,tm 结构的定义如下:struct tm { int tm_sec;原创 2021-09-02 11:01:57 · 279 阅读 · 0 评论 -
C++ | C++中引用
C++ | C++中引用引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。原创 2021-09-01 20:55:39 · 117 阅读 · 0 评论 -
C++ | C++ new和delete运算符简介
C++ | C++ new和delete运算符简介在c语言中,使用malloc动态申请内存和使用free释放申请的内存。实例1:/******************************************************************* * > File Name: malloc.c * > Create Time: Wed Sep 1 17:19:26 2021 *****************************************原创 2021-09-01 17:33:23 · 146 阅读 · 0 评论 -
C++ | C++中的关键字const修饰符
C++ | C++中的关键字const修饰符关键字const的含义1.定义const常量2.const可以修饰函数的参数和返回值,在C++中,还可以修饰函数的定义体被const修饰的东西都受到保护,可以防止意外的改动,能提高程序的健壮性扩展:下面声明都是什么意思?const int a;int const a;const int *a;int * const a;int const * a const;/******/# 前两个的作用是一样,a是一个常整型数# 第三个意味着a是一原创 2021-09-01 16:52:33 · 200 阅读 · 0 评论 -
C++ | C++ 指针
C++ | C++ 指针实例1:#include <iostream>using namespace std;int main(void){ int a; char b[20]; cout << "The addr of variable a: "; cout << &a << endl; cout << "The addr of variable b: "; cout <原创 2021-09-01 13:06:05 · 255 阅读 · 0 评论 -
C++ | C++字符串
C++字符串C++ 提供了以下两种类型的字符串表示形式:C 风格字符串C++ 引入的 string 类类型C 风格字符串实例1:#include <iostream>using namespace std;int main(void){ char site[7] = {'A', 'B', 'C', 'd', 'E', 'F', '\0'}; cout << "TEST: "; cout << site << e原创 2021-08-31 12:04:43 · 163 阅读 · 0 评论