STL

C++ STL移除算法std::remove()函数入门

前面一节我们学习了区间交换算法swap_ranges()函数,读者是否还记得它的功能是什么吗?没错,该函数能够高效地交换两个同类型且等长的区间。本节我们将学习一个新的算法——移除算法,顾名思义,移除算法指的是快速移动同目标元素相等的元素到非相等元素区间,注意“移除”并非删除,想要实现删除效果需要配合erase()函数才行。remove()函数就是一个重要的移除函数,”remove“的意思是”移除“

C++ STL序列查找算法std::find_first_of()函数入门

本节我们将继续进行序列查找的学习——find_first_of()函数。find_first_of(first1,last1,first2,last2)函数的功能是:用于在第一个序列中查找第二个序列中任意一个元素的第一次出现。它的函数模型是://基本形式template<classInputIt,classForwardIt&nb

C++ STL queue适配器入门

queue适配器,又被叫做”队列“,与deque双端队列不同,它禁止随机插入元素并且只能从队尾进队首出,和就像坐地铁排队一样,不允许插队行为且遵守先入先出规则。queue适配器的成员函数也比较简单,除了元素增删位置不同其他与stack适配器没有什么区别。push()、emplace()把元素放进队尾,pop()把队首元素删除,size()查看元素总数,empty()检查队列是否为空,swap()交

不要试图修改C++ STL有序关联式容器内元素的键(key)!

C++ STL库有序关联式容器我们已经学习完了。想必有不少读者存疑:能不能修改元素的键(key)呢?答案是肯定的,不能!为什么,就像是下标对于数组一样,是数组属性的一部分,键(key)对于有序关联式容器来说也是如此,键(key)关乎容器内元素的访问和排序,是基本的属性规则,不允许修改。其次,pair模板对象的底层是:pair(const_T1&__a,c

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

前面一节我们学习了反向复制算法 copy_backward() 函数,读者是否还记得它的功能是什么吗?没错,该函数能够从序列的末尾开始向开头进行复制。本节我们将学习一个真正反转元素顺序的算法——reverse_copy() 函数。"reverse" 意为"反转","copy" 意为"复制",从名称就能看出,这个函数不仅

C++ STL 迭代器辅助函数advance()入门

本章到此为止,我们已经学习了所有的迭代器适配器。但我们并不止步于此,我们还可以对迭代器有更深的理解!从本节开始,我们将进入迭代器函数的学习。那什么是迭代器函数呢?对于这个疑惑,读者无需担心,因为迭代器函数就像普通函数一样有参数和返回值两个基本属性,它能使我们更好地操作函数。值得注意的是,迭代器函数需要包含<iterator>头文件才能使用。迭代器函数并不多,就只有4个:advance(

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

到目前为止,我们已经把主要的排序模板函数讲完了,读者还记得有哪些吗?这里笔者通过表格向读者展示一下,希望读者对这些排序模板函数有基本掌握。函数名功能sort对指定范围内的元素进行通用、高效的排序。不保证相等元素的原始相对顺序。通常使用内省排序(快速排序+堆排序),平均和最优时间复杂度为O(N log N)。stable_sort对指定范围内的元素进行稳定排序。保证相等元素在排序后的相对顺序与其在原

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

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

C++ STL工具函数std::move()函数入门

前面一节我们学习了旋转复制算法 rotate_copy() 函数,读者是否还记得它的功能是什么吗?没错,该函数能够在保持原序列不变的前提下生成旋转后的副本。本节我们将学习一个工具算法——move() 函数。"move" 意为"移动",从名称就能看出,这个函数用于将元素从一个位置移动到另一个位置,主要应用于批量高效移动复杂对象。move() 函数的语法格式如下

C++ STL有序关联式容器如何更改排序规则?

到目前为止,我们已经把有序关联式容器全部学习完了,读者是否能够完整地枚举它们并清晰地区分它们呢?它们分别是:map容器、multimap容器、set容器和multiset容器。它们都有一个共同的特点,就是能够在元素插入时按照默认的排序规则将键(key)排序(默认都是升序排序),那么如何更改有序关联式容器的排序规则呢?对于这个问题,我推荐使用仿函数来实现。什么是仿函数,读者心里可能一头雾水。简单来说