C++学习笔记(5)--STL
2022/6/26 1:24:29
本文主要是介绍C++学习笔记(5)--STL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++17的结构化绑定
首先设置语言标准为C++17标准(或更高的版本),才支持结构化绑定
void test1() { Student s1(18, "Tom"); auto [age, name] = s1; cout << "age=" << age << "name=" << name << endl; } void test2() { vector<Student> sv= { Student(18,"Tom"),Student(20,"Jack"),Student(23,"Clark") }; Student s[] = { Student(18,"Tom"),Student(20,"Jack"),Student(23,"Clark") }; for (const auto[age, name] : sv) { cout << "age=" << age << "name=" << name << endl; } }
函数set_new_handler
函数说明
- set_new_handler函数的作用是设置new_p指向的函数为new操作或new[]操作失败时调用的处理函数。
- 设置的处理函数可以尝试使更多空间变为可分配状态,这样新一次的new操作就可能成功。当且仅当该函数成功获得更多可用空间它才会返回;否则它将抛出bad_alloc异常(或者继承该异常的子类)或者终止程序(例如调用abort或exit)。
- 如果设置的处理函数返回了(例如,该函数成功获得了更多的可用空间),它可能将被反复调用,直到内存分配成功,或者它不再返回,或者被其它函数所替代。
- 在尚未用set_new_handler设置处理函数,或者设置的处理函数为空时,将调用默认的处理函数,该函数在内存分配失败时抛出bad_alloc异常。
参数说明
new_p:该函数指针所指的函数应为空参数列表且返回值类型为void
该函数可以尝试获得更多的可用空间,或者抛出异常,或者终止程序。
如果是一个空指针,处理函数将被重置为默认值(将会执行抛出bad_alloc异常)。
返回值
返回先前被设置的处理函数指针;如果尚未被设置或者已被重置,将返回空指针。
返回的函数指针是无参的void返回值类型的函数指针。
placement new 是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。placement new的作用就是:创建对象(调用该类的构造函数)但是不分配内存,而是在已有的内存块上面创建对象。用于需要反复创建并删除的对象上,可以降低分配释放内存的性能消耗。
以_ t结尾的这些数据类型被称为原始系统数据类型。
它是为了方便系统之间的移植(跨平台)而定义的
size_t 数据类型
size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。
size_t的真实类型与操作系统有关,在32位架构中被普遍定义为:
typedef unsigned int size_t;
而在64位架构中被定义为:
typedef unsigned long size_t;
size_t在32位架构上是4字节,在64位架构上是8字节,在不同架构上进行编译时需要注意这个问题。
而int在不同架构下都是4字节,与size_t不同;且int为带符号数,size_t为无符号数。
参考:size_t在WikiPedia上的词条
- size_t是无符号的,并且是平台无关的,表示0-MAXINT的范围;
- int是有符号的;
STL版本
HP惠普版--所有版本的始祖
PJ Plauger版--符号命名不规范,可读性差
Rouge Wave版--可读性不错
SGI 版--被GCC采用,可读性很好
STL组件
容器Container--储存数据
算法Algorithm--操作数据
迭代器Iterator--读写数据
仿函数Functor--模仿函数的类
适配器Adapter--修饰作用
空间配置器Allocator--内存管理
|
|
包含的越多,越泛化; 包含的越少,越特化 |
越子类,越特化,越父类,越泛化; 子类比父类更特化,父类比子类更泛化; |
泛化:更加宽泛、更加抽象,交通工具比自行车更泛化,工作日比星期3更泛化 特化:更加详细、更加具体,狗比动物更具体,14点比下午更具体; 泛化和特化的示意图 |
partial order偏序:对不同泛化/特化化程度的函数模板进行重载排序;以防止函数调用的歧义/二义性/ambiguous
partial specialization 偏特化:对模板/泛型类中的参数类型进行具体化或者部分具体化;太过于泛化,不便于某些具体实现;更加具体的实现需要更加特化的参数;
例如实现吃Eat()方法只需【Animal动物】泛化层级的参数,而实现吃肉EatMeat()方法则需要更加特化的的参数【食肉动物carnivore】
class template partial specialization类模板偏特化
function template partial order偏序模板函数
这篇关于C++学习笔记(5)--STL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享