Let’s Make C++ Great Again
文章平均质量分 86
FeatherWaves
这个作者很懒,什么都没留下…
展开
-
Let’s Make C++ Great Again——algorithm库
lower_bound() 和 upper_bound() 函数可以在有序容器中查找指定元素的位置,返回该元素在容器中的迭代器。nth_element() 函数可以对容器中的元素进行部分排序,将第 n 小的元素放在第 n 个位置,前 n-1 个元素都小于等于第 n 个元素,后面的元素都大于等于第 n 个元素。partial_sort() 函数可以对容器中的元素进行部分排序,将前 n 个最小的元素放在容器的前 n 个位置,其余元素的顺序不保证。replace() 函数可以将容器中指定值的元素替换为新值。原创 2023-04-23 16:20:13 · 735 阅读 · 0 评论 -
Let’s Make C++ Great Again——multiset与unordered_set
其中,value_type 是元素的类型。// 自定义排序方式的实现 } };其中,MyType 是元素的类型,MyCompare 是自定义排序方式的类型。其中,value_type 是元素的类型。由于 unordered_set 使用哈希表数据结构,因此在使用自定义类型时,需要自定义哈希函数和相等比较函数,以便 unordered_set 正确地进行哈希和比较操作。int x;string y;} };} };intint x;string y;} };} };原创 2023-04-23 16:17:38 · 571 阅读 · 2 评论 -
Let’s Make C++ Great Again——map与unordered_map
其中,key_type 是键的类型,value_type 是值的类型。int默认情况下,map 使用 < 运算符进行键的比较。// 自定义比较函数的实现 } };以上是 map 的一些常用函数和用法,可以根据实际需要选择使用。其中,key_type 是键的类型,value_type 是值的类型。int默认情况下,unordered_map 使用 std::hash 进行哈希函数的计算。// 自定义哈希函数的实现 } };原创 2023-04-23 16:15:55 · 430 阅读 · 0 评论 -
Let’s Make C++ Great Again——string与常用字符处理函数
isdigit() 函数可以判断一个字符是否为数字字符(即 0 到 9 中的任意一个字符),而 isalpha() 函数可以判断一个字符是否为字母字符(即 A 到 Z 或 a 到 z 中的任意一个字符)。strchr() 函数搜索字符串中指定字符的第一个出现位置,并返回该位置的指针,而 strrchr() 函数搜索字符串中指定字符的最后一个出现位置,并返回该位置的指针。需要注意的是,strcpy() 函数会将源字符串中的 \0 也复制到目标字符串中,因此需要确保目标字符串有足够的空间来存储复制后的字符串。原创 2023-04-23 16:08:55 · 669 阅读 · 0 评论 -
Let’s Make C++ Great Again——set与vector
};it!可以看到,程序根据字符串长度从小到大排序了元素。总之,set是一个非常有用的容器,可以方便地实现对元素的操作,并且保证元素无重复。在实际的编程中,我们可以根据不同的需求来灵活地使用set容器。在算法模拟题中,set容器通常用于实现集合的概念,即存储一些元素,同时保证元素无重复。在模拟一些实际场景时,例如计算两个集合的交集、并集等操作时,set容器可以很方便地实现这些操作。原创 2023-04-23 16:04:34 · 692 阅读 · 0 评论 -
Let’s Make C++ Great Again——友元及内部类
目录友元引入友元函数友元类内部类概念注意特性友元引入我们在接触运算符重载时,提到过友元函数。当时是为了解决全局运算符重载函数无法使用到对象的私有成员变量的问题。友元函数友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。class A{ friend void func();private: int _a;};void func(){ A a; a._a;}说明:友元函数可访问类的私有和保护原创 2022-03-30 10:29:01 · 911 阅读 · 0 评论 -
Let’s Make C++ Great Again——static成员及C++11中的成员初始化新玩法
目录static成员引入特性问题C++11中的成员初始化新玩法再谈封装static成员引入声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态的成员变量一定要在类外进行初始化。特性静态成员为所有类对象所共享,不属于某个具体的实例,生命周期:整个程序运行期间静态成员变量必须在类外定义,定义时不添加static关键字类静态成员即可用类名::静态成员或者对象.静态成员来访问静态成员函数没有隐藏的t原创 2022-03-30 09:33:50 · 181 阅读 · 0 评论 -
Let’s Make C++ Great Again——初始化列表和explicit关键字
目录初始化列表引入注意总结explicit关键字初始化列表引入class Date{public: Date(int _year, int _month, int _day) { this->_year = _year; this->_month = _month; this->_day = _day; }private: int _year; int _month; int _day;};进行对象的实例化时,编译器会自动调用构造函数,给成员变量一原创 2022-03-29 12:35:14 · 686 阅读 · 0 评论 -
Let’s Make C++ Great Again——const成员函数和取地址及const取地址操作符重载
目录const成员函数初识两个问题const对象可以调用非const成员函数吗?非const对象可以调用const成员函数吗?总结取地址及const取地址操作符重载const成员函数初识刚听到const成员函数时,以为如同const成员变量一样的写法:const 类型名 函数名(参数);。但其实,是:类型名 函数名(参数) const;这个const实际修饰的是被隐藏的this指针常量。两个问题class Date{public: Date(int _year = 0, int _mo原创 2022-03-28 20:48:27 · 1764 阅读 · 0 评论 -
Let’s Make C++ Great Again——运算符重载练手程序
目录代码Date.hDate.cpptest.cpp运行结果分析Date.h代码Date.h#pragma once#include <iostream>using namespace std;class Date{public: Date(int _year = 0, int _month = 0, int _day = 0); void print(); bool operator<(const Date& d); bool operator<=原创 2022-03-27 11:48:58 · 698 阅读 · 0 评论 -
Let’s Make C++ Great Again——析构函数及拷贝构造函数
析构函数前面有构造函数进行对象的初始化工作,现在再增加一个特殊的成员函数,进行扫尾工作。析构函数:与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象的一些资源清理工作。析构函数名是在类名前加上字符 ~。无参数无返回值。一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数(不像构造函数一样支持函数重载,原因:无参数)。对象生命周期结束时,C++编译系统系统自动调用析构函数。.原创 2022-03-21 10:34:32 · 1258 阅读 · 0 评论 -
Let’s Make C++ Great Again——6个默认成员函数的引入及构造函数
目录类的6个默认成员函数初始化和清理拷贝复制取地址重载构造函数特性类的6个默认成员函数空类class Date {};中是不是就是为空,答案是否定的。任何空类,都会自动生成6个默认成员函数。初始化和清理构造函数: 主要完成初始化工作析构函数: 主要完成清理工作拷贝复制拷贝构造: 使用同类对象初始化创建对象赋值重载: 主要是把一个对象赋值给另一个对象取地址重载主要是普通对象和const对象取地址,这两个很少会自己实现构造函数在刚开始学习C++,未学构造函数时,老师会说为了保持封装性,把原创 2022-03-02 09:47:47 · 126 阅读 · 0 评论 -
Let’s Make C++ Great Again——类的实例化与大小及this指针
目录类的实例化计算类的大小this指针引入特性类的实例化用类类型创建对象的过程,称为类的实例化类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间计算类的大小计算类的大小,我们可能想到是不原创 2022-03-01 20:58:31 · 417 阅读 · 0 评论 -
Let’s Make C++ Great Again——类及其封装
目录认识面向过程和面向对象类的引入类的定义方式一:声明和定义全部放到类中方式二:声明放在.h文件中,类的定义放在.cpp文件中封装及类的访问限定符封装类的访问限定符认识面向过程和面向对象C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的(但是其实是面向对象和面向过程混编,原因:C++包括了C),关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。类的引入在C语言中,结构体只能包含成员变量;而在C++中,结构体除了包括成员变量外,还可原创 2022-03-01 16:39:54 · 486 阅读 · 0 评论 -
Let’s Make C++ Great Again——C++11部分内容
目录auto关键字使用细节注意auto不能推导的场景基于范围的for循环使用条件指针空值nullptr注意auto关键字auto在C++11中,作为一个类型指示符来指示编译器,auto声明的变量必须由编译器再编译时期推导而得。注意:使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。这是很容易理解的。使用细节注意auto与指原创 2022-03-01 14:27:38 · 143 阅读 · 0 评论 -
Let’s Make C++ Great Again——extern “C“ 与 内联函数
目录extern "C" 简介C++程序调用C的库,在C++程序中加extern "C"C程序调用C++的库,在C++库中加extern "C"内联函数特性小总结及补充宏的优缺点?C++有哪些技术替代宏?extern “C” 简介有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern "C",意思是告诉编译器,将该函数按照C语言规则来编译。比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree两个接口来使用,但如果是C项目就没办法使用原创 2022-03-01 09:51:28 · 559 阅读 · 0 评论 -
Let’s Make C++ Great Again——引用
目录引用引用概念引用特性引用的应用传参传返回值效率比较引用与指针的区别引用经常与const搭配使用引用我使用引用还是比较频繁的,有一个直观的感觉:引用简化了一层指针的使用。提前纠正一下之前的错误:引用不能被引用,原因:引用只能引用实体,而引用本身不是实体这句话是错误的。#include <iostream>using namespace std;int main(){ int c = 10; int& b = c; int& d = b; cout &l原创 2022-02-28 20:14:24 · 262 阅读 · 0 评论 -
Let’s Make C++ Great Again——函数重载
目录函数重载函数重载的概念函数重载与缺省参数的碰撞函数重载重载可以认为是,一词多义。其实函数重载的提出也是为了弥补C语言的一些比较麻烦的地方。比如说,在C语言中,我定义了一个add(p1, p2),希望它能够实现p1 p2的加和,对于p1 p2的类型,如果此处是int int,那么函数add就是为了进行int int的加法的,如果此时我需要一个double double的加法函数时,定义时不能再使用add这个函数名了,难以用一个函数名进行所有加和。如果直接给我两个参数进行加和,p1 p2,不告诉我这原创 2022-02-15 13:53:58 · 465 阅读 · 0 评论 -
Let’s Make C++ Great Again——命名空间和缺省参数
在学校学过C++,但是由于平常更多的是写一些算法代码,使用C++的语法不多,现在关于的C++的高阶一点的知识已经比较模糊,而且当时学C++时有许多没搞懂的问题,这些问题对我后面的学习没有立刻的用处,一忽略,就全没了。在学校学习C++的过程中始终没搞懂命名空间是啥?现在在这个方面深入一下。...原创 2022-02-14 17:54:49 · 516 阅读 · 1 评论