STL

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

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

C++ STL比较算法std::equal()函数入门

上一节我们学习了一元谓词判断算法,读者是否还记得他们分别是什么吗?没错,它们分别是all_of()函数、any_of()函数、none_of()函数,其中all_of()函数为”全称判断“,any_of()函数为”存在判断“,none_of()函数为”全否判断“。本节我们将学习新的算法——比较算法,那什么有时比较算法呢?就像字符串比较一样,比我我们有两个字符串s1和s2:strings

C++ STL 流缓冲区迭代器入门

上一节我们学习了流迭代器,本节我们继续深入学习流对象的缓冲区迭代器——分别是istreambuf_iterator(从缓冲区读取字符)和ostreambuf_iterator(向缓冲区写入字符)。由于缓冲区读取数据要比流对象快,所以流缓冲区迭代器的操作效率要比流迭代器高。但在需要类型转换和数据验证的场景中,流迭代器提供了更好的安全性和便利性,读者需要明晰两者之间的区别。它们的使用方式十分“相似&q

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

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

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

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

C++ STL旋转算法std::rotate_copy()函数入门

前面一节我们学习了旋转算法 rotate() 函数,读者是否还记得它的功能是什么吗?没错,该函数能够对序列进行原地循环移位操作,该操作会物理破坏原序列完整性,如果你不想这样,读者推荐使用rotate_copy()函数。那什么是rotate_copy() 函数呢?"rotate" 意为"旋转","copy" 意为"复制"

C++ STL查找算法std::find()函数入门

本节我们进入查找算法find()函数的学习。find(beg , end , val)函数的功能是在指定区间[beg , end)查找是否有与val值相等的元素,是则返回指向该元素的迭代器,否则返回end()。对于自定义数据来说,使用find()函数需要类内重载”==“运算符。下面我们通过find()函数来分别对基本数据类型和自定义数据类型进行指定元素查找:#include<iostream

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

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

C++ STL二分查找std::lower_bound()函数入门

前面几章,我们已经深入学习了很多查找算法,比如find()函数、find_if()函数、find_first_of()函数等,它们都是线性查找。本节我们开始其他查找方式的学习,比如lower_bound()函数、upper_bound()函数、equal_range()函数和binary_search()函数,它们都能够查找元素,只不过底层采用二分查找的方式,效率比线性查找高。本节我们进行lowe

深度剖析C++ STL priority_queue适配器底层的堆结构

在《C++ STL priority_queue适配器入门》我们就曾提到优先队列的底层结构是堆,具体是二叉堆,这个二叉堆可以类比二叉树进行学习。可能有读者存疑了,本章不是在学习容器适配器吗,怎么会谈到底层结构呢,这么说优先队列底层到底是堆还是vector容器还是deque容器呢?其实,结构和容器是两个完全不同的概念,但是它们可以组合在一起!就适配容器而言,优先队列采用vector容器或deque容