STL

C++ STL deque容器如何增删元素?

前面我们已经充分了解deque的基本知识以及访问方式,本节将一口气为读者详细介绍如何对deque进行增删操作,加快我们的学习进度。这里可以类比vector的增删操作,《vector容器怎么在指定位置前插入元素?》、《vector容器怎么删除元素呢?》,读者通过对比学习,总结归纳出自己的宝贵经验,提高对STL容器的掌控力。我们先谈谈“增”这个操作:对比vector,我们都知道deque能够实现头增尾

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

和很多容器一样,map有正向迭代器begin()、end(),有反向迭代器rbegin()、rend(),还有常量迭代器cbegin()、cend()、crbegin()、crend(),(c表示const,可读不可改),这些迭代器都是双向迭代器,只能进行++或--操作,不能+5或-8随机访问。本节抓重点,主要讲map的其他迭代器。在前一节我们就总结了map常用成员函数,可跳转《初识ST库中的ma

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

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

C++ STL容器该如何选择?

到目前为止,我们已经把所有容器全部学习完毕!包括:序列式容器:array容器、vector容器、deque容器、list容器、forward_list容器。有序关联式容器:map容器、set容器、multimap容器、multiset容器。无序关联式容器:unordered_map容器、unordered_multimap容器、unordered_set容器、unorder

判断C++ STL list容器是否为空,都给我用empty()!

在判断链表容器是否为空时,有人喜欢用size(),有人喜欢用empty(),这两种方法都可以成功判断list是否为空。如果读者使用的是empty(),那我没话说;但如果读者使用的是size(),读者可就要慎用了,因为在数据量很大的情况下,size()这会降低运行效率。这是为什么呢?要知道,STL大师不会任意制造“容器垃圾”,list有empty()这个成员函数就一定有它的道理。在C++11前,由于

C++ STL无序关联式容如何处理自定义数据类型?

本章我们总共学习无序关联式容器:unordered_map容器、unordered_multimap容器、unordered_set容器、unordered_multiset容器,他们的底层都是基于哈希表的结构封装起来的一个类。在存储基础数据类型时,键(key)能够通过哈希函数转为哈希值(数据类型为size_t),当我们的键为自定义数据类型时,就需要我们重新定义哈希函数和重载operator&#3

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

学到这里,我们已经掌握map容器的基本知识了,增、改、查,但还没有学过删。本节将继续带领读者一起学习如何为map容器删除元素。erase()是删除map容器内元素的主要函数,这里通过代码简单介绍如何通过erase()删除元素:#include<iomanip>#include<iostream>#include<map>#inclu

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

和其他容器一样,在学会创建容器后我们就要认识其迭代器。list同我们学过的vector一样,也有begin()、end()正向迭代器,rbegin()、rend()反向迭代器,更有可读不可改的cbegin()、cend()、crbegin()、crend()这种常量迭代器(c这里表示const,意为不可修改)。他们在链表中的位置如下图所示:list和之前学过的deque、vector、array一

C++ STL复制算法std::copy_backward()函数入门

前面一节我们学习了条件复制算法copy_if()函数,读者是否还记得它的功能是什么吗?没错,该函数能够根据条件筛选元素并复制到目标区域。本节我们将学习一个反向复制算法——copy_backward()函数。”back“意为”后面“,”forward“意为”朝某个方向“,”copy_backward“表示”从后面往前复制“,从名称就能看出,这个函数与常规复制方向不同,它从序列的末尾开始向开头进行复制