STL

C++ STL multiset容器入门

通过前面对set容器的学习,我们已经完全掌握了set容器基本的增删查改操作,如果读者还不知道set容器可跳转《初识STL库中的set容器》。本节我们将会学习一个特殊的set容器——multiset,就像multimap对于map那样允许存在重复键值,multiset的特殊之处也在于允许存在重复键值。读者可以试想一下,如果set允许存在重复键值,那么影响最大的会是什么?没错,multimap会丧失“

C++ STL 排序算法std::partial_sort()函数入门

partial_sort(first , middle , last)排序算法模板函数,”partial“意为”部分“,该排序算法指的是在指定区间[first , last)按排序规则找出前(middle-first)个元素并存放进排序区间[first , middle)中。使用partial_sort(first , middle , last)时需要包含头文件<algorithm>

C++ STL转换算法std::transform()函数入门

前面一节我们学习了填充算法 generate() 函数和 generate_n() 函数,读者是否还记得它们的功能分别是什么吗?没错,generate() 函数能通过生成器为序列中的每个元素赋值,generate_n() 函数能够从指定位置开始为指定个数的元素重新赋值。本节我们将学习一个转换算法——transform() 函数,"transform" 意为"转换&qu

深度剖析C++ STL无序关联式容器的底层构造

C++ STL无序关联式容器:unordered_map容器、unordered_multimap容器、unordered_set容器、unordered_multiset容器,其底层构造都是基于哈希表封装的。如果读者还不具备哈希基础的话可自行跳转《哈希算法实例详解》学习。简单来说,无序关联式容器可以看作指针数组+链表的奇妙组合。原理可理解为:我们向堆区开辟了一段连续空间(可理解为数组),空间大小

C++ STL 移动迭代器入门

本节我们将详细介绍移动迭代器适配器,又称之为“移动迭代器”。那么什么是移动迭代器呢?简言之,“*it”表示迭代器解引用,为左值引用,能够访问和二次赋值对象;而使用移动迭代器后,“*it”表示右值引用,直接更改元素的内部指针,实现资源转移。移动迭代器的强大之处在于高效率“移动”对象,但是需要谨慎使用,因为移动后“源对象”处于非定义状态,可能会造成程序的崩溃。为了更加详细地介绍移动迭代器,我们可以举个

C++ STL set容器如何删除元素?

前面一节我们学会了3种方法为set容器添加元素,分别是insert()、emplace()和emplace_hint()。如果我们需要删除set内元素,读者第一时间会想到什么?没错,erase()成员函数。set容器主要就是通过erase()删除元素的,clear()实现元素清空。下面我们就通过代码分别展示如何为set容器删除元素。#include<iomanip>#include&

C++ STL deque容器入门

前面我们已经接触到array、vector容器,掌握里一定的基础。现在我们开始进行deque容器的学习。duque,double-ended queue,意思就是双端队列,该容器首尾都能够进行增删元素操作且其时间复杂度为O(1)。deque底层是中控区+缓冲区,可以理解为通过指针链接数组块。deque与vector极其相似,下面展示其所有成员函数:类别成员函数函数签名说明元素访问atreferen

深入学习C++ STL deque容器的迭代器

前面《初识STL库中deque容器》我们已经学会创建deque容器并且了解到很多deque的成员函数,本节将会详细讲解deque容器的迭代器。deque容器和vector容器一样,都有begin()、end();rbegin()、rend();cbegin()、crbegin()···下图为deque迭代器指向:下面将通过代码向您展示如何通过迭代器访问deque内的元素:#include<b

C++ STL map容器入门

前面我们学习了pair模板类——《初识模板类pair》是为了本节学习map作准备。map作为有序关联式容器,其通过pair模板的形式存储元素,并根据key值(指pair中的first)进行自动排序,排序默认是升序,但我们也可以通过仿函数实现降序排序,值得注意的是,map的键值具有唯一性,不允许出现重复键值。接下来我们通过代码来了解如何创建map容器:#include<bits/stdc++.

C++模板是什么?

C++模板是C++编程语言中的泛型编程工具,它允许你编写与具体数据类型无关的通用代码。简单来说,模板让你可以创建一个"代码蓝图",编译器会根据这个蓝图为不同的数据类型生成具体的代码。举个例子:在C++的世界里,有很多种数据类型,比如int(整型)、double(双精度浮点型)、float(单精度浮点型)、long long(长整型)等,为了实现各个类型的加法函数,我们一般都会这