
C++
文章平均质量分 89
DCVFGVB
这个作者很懒,什么都没留下…
展开
-
C++//特殊工具与技术
1. 控制内存分配1. new和deletenew表达式三步走:==>调用名为operator new(对应对象)或operator new[](对应对象的数组)的标准库函数,该函数分配足够大的、原始的、未命名的内存空间来存储特定的对象或是对象的数组。==>编译器允许对应的构造函数完成对象的构造,并传入初始值。==>对象被分配空间,返回指向该对象的指针。delete两步走:==>对指针所指向对象,或是所指向的数组的元素调用析构函数==>编译器调用operator原创 2022-04-19 18:12:46 · 438 阅读 · 0 评论 -
C++//用于大型程序的工具
啊原创 2022-04-18 16:38:44 · 739 阅读 · 0 评论 -
C++//标准库特殊设施
1. tuple类型n个元素,类型可以各不相同。为什么要用get而不像pair那样,使用first和second?因为不知道tuple有多少元素。get中尖括号内的i需要是一个整形常量表达式。tuple提供了两个类模板来查询里面的元素信息,这些模板都需要将tuple的类型信息作为参数传入,如果不知道tuple具体类型咋办?用decltype即可求出tuple的类型信息,用它来实例化模板。只有当两个tuple有相同的元素数量时才可以比较它们,且必须保证逐元素使用关系运算符都是合法的。2.原创 2022-04-14 18:58:02 · 521 阅读 · 0 评论 -
C++//模板与泛型编程
1. 定义模板模板参数列表的类型名(T)前必须加上关键字class或者typename。模板示例如下:编译器会根据实参类型实例化出一个特定版本的函数。T称为模板类型参数,可以将类型参数看作类型说明符,就像使用内置类型或者类类型说明符一样使用。可以用来指明返回值类型或者作为函数参数类型。除了类型参数,还可以在模板中定义非类型参数。非类型参数可以是整形,指向对象或者函数的指针或左值引用。绑定到指针或引用的非类型参数的实参必须具有静态生存周期。在使用过程时,编译器会使用传入的字面常量的长度替换原创 2022-04-12 16:37:15 · 1072 阅读 · 0 评论 -
C++//面向对象程序设计
1. 定义基类和派生类OOP(object-oriented programming)面向对象变成。基类将其成员函数分为两类:一类是基类希望派生类进行覆盖的函数(虚函数),一类是基类希望派生类直接继承而不要改变的函数。使用指针或引用调用虚函数时,该调用会被动态绑定,根据引用或指针所绑定的对象类型不同,该调用可能执行基类或者派生类的版本。任何非构造和非static的函数都可以是虚函数。成员函数若未被声明为虚函数,其解析发生在编译时而不是运行时。protected权限是指允许派生类访问而不允许其他用原创 2022-04-07 20:47:27 · 232 阅读 · 0 评论 -
C++//重载运算与类型转换
1. 基本概念函数名格式为 operator+要定义的运算符号除了重载的函数调用运算符operator()外,其他重载运算符不能含有默认实参。一般情况下重载的运算符函数参数数量和运算符作用的运算对象数量一样多,且按顺序一一对应。重载运算符或者是类的成员函数(其实也就保证了一个类类型的参数),或者至少含有一个类类型的参数。也就是说无法重载作用于内置类型的运算符。可以重载大部分运算符,且只能重载已经存在的运算符,重载的运算符的参数数量,优先级,结合律都和原运算符一样:不应该重载有求值顺序/短路求值原创 2022-04-06 10:40:49 · 2052 阅读 · 0 评论 -
C++//拷贝控制
1. 拷贝、赋值、与销毁1. 拷贝构造函数如果构造函数的第一个参数是自身类型的引用,且额外参数都有默认值。则此构造函数是拷贝构造函数。为什么第一个参数是引用?因为非引用的参数要进行拷贝初始化,调用拷贝构造函数,导致无限循环。拷贝构造函数不能声明为explicit的,在很多情况下都会隐式使用。1.1 合成拷贝构造函数无论定没定义拷贝构造函数,编译器都会定义一个合成拷贝构造函数。对某些类,合成拷贝构造函数用来防止该类型对象赋值。一般情况下,合成拷贝构造函数将参数的非static数据成员依次拷贝原创 2022-04-03 10:42:03 · 912 阅读 · 0 评论 -
C++//动态内存
1. 动态内存和智能指针C++提供了两种智能指针管理动态对象,负责自动释放所指对象。类似vector,智能指针也是模板。创建一个只能指针时,需要给出指针可以指向的类型。1.1 shared_ptrmake_shared定义在头文件memory内。类似于顺序容器的emplace成员,make_shared使用其参数构造所指向的对象。如果不传递任何参数,对象就会进行值初始化。...原创 2022-03-31 11:02:11 · 964 阅读 · 0 评论 -
C++//关联容器
1. 使用关联容器关联容器通过关键字保存和访问元素。顺序容器按照在容器的位置保存和访问元素。关联容器可以按照不同的特性分类,底层是map或者set。根据能否有重复的关键字可以加上muti,根据是否按顺序保存可以加上unordered_。关联容器也是模板,在创建对象时,需要指明元素类型。1.1 定义关联容器每个关联容器都定义了一个默认构造函数,它创建一个指定类型的空容器。除此以外,还能用另一个同类型的关联容器的拷贝来初始化。或者用值范围来初始化。map类型中,第一个元素为关键字,第二个元素原创 2022-03-30 11:14:58 · 709 阅读 · 0 评论 -
C++//泛型算法
1. 初识泛型算法泛型:可以作用于不同类型的元素和多种容器类型算法:实现了一些经典算法诸如排序和搜索的接口。泛型算法运行于迭代器之上,不会执行容器的操作。由此得出假定:泛型算法永远不会改变底层容器的大小。输入范围:标准库算法都对一个范围内的元素进行操作,该范围称为输入范围。如果算法接受输入范围作为参数,通常用前两个参数表示范围,即第一个元素和尾后元素的迭代器。大多数算法存储在algorithm头文件内,numeric中定义了一组数值泛型算法。1.1 只读算法只会读取输入范围中的元素,而不会改变原创 2022-03-29 11:37:51 · 1314 阅读 · 0 评论 -
C++//顺序容器
1. 顺序容器允许随机访问的,插入和删除一般不快。插入和删除快的,一般不支持随机访问。forward_list的目的是达到与最好的手写的单向链表数据结构相当的性能,所以不支持size操作,因为保存和计算size会带来开销。list和forward_list是唯一删除效率高的顺序容器。没有必需用其他容器的理由,请使用vector。如果需要在中间插入元素且需要随机访问,就比较vector和list的缺点谁带来的损失小。2. 容器库概览容器上操作的层次:1. 所有容器类型都提供。 2. 仅针对顺序容原创 2022-03-28 10:51:08 · 1837 阅读 · 0 评论 -
C++//IO库
1. IO类不同头文件包含了读写不同对象的类型。上述的io类型都继承自同一个类型,即istream,因此可以像使用istream一样使用上述io类型。比如可以沿用>>,<<,getline对不同类型的对象进行操作而无需区分具体类型。1.1 IO对象无拷贝和赋值2.1 条件状态流一旦发生错误,后续的IO操作都会失败。因此在使用一个流之前应该检查它是否在无错状态。将流作为判断条件只能得出流是否有效的结论,无法告诉我们到底发生了什么。机器无关的iostate类型:IO原创 2022-03-25 16:36:32 · 216 阅读 · 0 评论 -
C++//类
a的撒旦原创 2022-03-23 16:38:31 · 1956 阅读 · 0 评论 -
C++//函数
1. 函数基础典型函数结构:返回类型,函数名,0个或者多个形参组成的列表,函数体。调用运算符():作用于一个表达式(可能是函数或者指向函数的指针),括号内是一组用逗号隔开的实参。一个函数调用的例子:并且,每次调用函数时,都要重新创建形参。1.1 形参和实参实参是形参的初始值。实参和形参之间有对应关系,且二者类型和数目必须匹配,或者实参类型可以转换为形参的类型,但是并未规定实参的求值顺序。编译器可以任意可行顺序对实参求值。任意两个形参都不能同名。如果函数用不上某个形参,此类形参通常不原创 2022-03-18 16:20:58 · 1613 阅读 · 0 评论 -
C++//语句
1. 简单语句;表示空语句。事实上,常用的:就是用上了空语句。上述例子也可以看出,多出的空语句也并非总是无害的。复合语句是指用花括号括起来的语句和声明序列,又称为块。空块为{},和空语句等价。2. 条件语句else与离他最近的尚未匹配的if相匹配。switch表达式的计算结果和某个标签相同,程序就从该标签第一条语句开始,直到执行到switch的结尾或者遇到break语句。可以多个标签执行同样的操作:在switch内的所有case在不加新的括号的情况下属于同一个作用域。这会导致在定义内原创 2022-03-16 11:04:46 · 368 阅读 · 0 评论 -
C++//运算符优先级表
原创 2022-03-15 15:13:17 · 395 阅读 · 0 评论 -
C++//表达式
1. 表达式基本概念运算对象类型转换过程中,小整数类型(bool,char,short)通常被提升(promoted)为较大的整数类型(int)。C++语言定义了运算符作用于内置类型和复合类型的运算对象时所执行的操作。当运算符作用于类类型的运算对象时,用户可以自定义其含义,这个过程称为重载运算符。IO库的>>和<<以及string对象,vector对象和迭代器使用的都是重载的运算符。重载某个运算符时运算对象的类型和返回值的类型都是可以自定义的,但是运算对象的个数、运算原创 2022-03-15 15:11:28 · 2086 阅读 · 0 评论 -
C++//字符串、向量和数组
1. 名字空间作用域操作符::,作用域操作符的含义是,编译器应从操作符左侧的名字空间去寻找右侧的名字。使用using 声明即可无需作用域操作符去访问名字。格式如下:每个using声明引入命名空间的一个名字,每个名字都需要独立的using声明。注意在使用中,头文件一般不使用using声明。可能导致包含该头文件的程序包含了这个名字程序员不知道。...原创 2022-03-14 14:41:15 · 1266 阅读 · 0 评论 -
C++//变量和基本类型
字面值常量如果两个字面值位置紧邻且仅由空格,缩进和换行分割,它们仍是一个整体。可以通过添加表2.2指定的前缀和后缀来指定字面值的类型。变量 初始化 初始化和赋值的含义是不同的,初始化是指创建对变量的时候赋予的初始值,赋值是指 把对象当前值删除,以一个新的值代替。 列表初始化是C++11标准的一部分,可用于初始化以及赋值。当用于内置类型的变量时,如果有丢失信息的风险,则会报错。下述四条语句皆可完成units_sold的原创 2022-03-11 22:19:03 · 1181 阅读 · 0 评论