STL

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

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

C++ STL 排序算法总结

本节将对我们本章所学到的所有排序模板进行一个总结。读者还记得我们学过哪四个排序函数吗?它们分别是:排序函数函数功能sort对指定范围内的元素进行通用、高效的排序。不保证相等元素的原始相对顺序。通常使用内省排序(快速排序+堆排序),平均和最优时间复杂度为O(N log N)。stable_sort对指定范围内的元素进行稳定排序。保证相等元素在排序后的相对顺序与其在原始序列中的相对顺序一致。当内存充足

C++ STL关联式容器简介

前面我们已经把序列式容器全部学习了,包括array、vector、deque、list和 forward_list,本节我们将进行关联式容器的学习。那什么是关联式容器呢?在回答这个问题之前,读者是否还记得序列式容器查找和修改元素都是按什么条件进行的,答案是“位置”,不管是vector、deque还是 list,他们都是以线性容器的方式,依靠“位置”进行查找和删改;关联式容器并不依靠“位置”进行元素

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

前面我们学习的查找算法都是单个元素进行查找,本节我们学习一个按序列进行查找的算法——find_end()。find_end(first1,last1,first2,last2)的功能是在主序列[first1,last1)中寻找最后一次出现的子序列[first2,last2),如果找到就返回最后一次出现在主序列中的子序列的起始迭代器;如果找不到就主序列的last1迭代器。举个例子,主序列是{&#39

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

前面一节我们学习了复制算法copy_n()函数,读者是否还记得它的功能是什么吗?没错,该函数能够从指定位置开始复制固定数量的元素到目标区域。本节我们将学习一个更智能的复制算法——条件复制算法copy_if()函数。从名称就能看出,这个函数在复制时会进行条件筛选,只复制满足特定条件的元素。copy_if()函数的语法格式如下:template<classInputIt,

C++ STL 函数重名时,你会选择成员函数还是模板函数?

到目前为止,我们已经学习了所有容器和大部分模板函数,读者是否遇到过这样的问题:算法头文件<algorithm>和容器的成员函数”撞衫“了,该选择哪一个好呢?比如查找函数,算法库中提供了一个模板函数find(),所有的关联式容器都有这个同名的成员函数find(),都能够判断是否存在该元素:#include<iostream>#include<vector>#i

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

前面一节我们学习了比较算法mismatch()函数,读者是否还记得它的功能是什么吗?没错,它不仅仅能判断两个序列是否完全相等,在不等的情况下,它还能帮我们找出哪一对元素不相等。本节我们将学习新的比较算法——lexicographical_compare()函数。“lexico”表示“字典”,“graphical”表示“书写的”,这里lexicographical_compare()函数指的是对两个

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

上一节我们学习了排列组合算法is_permutation()函数,读者是否还记得它的功能是什么吗?没错,该函数能够判断两个序列是否互为排列组合。本节我们将学习一个新的算法——复制算法,顾名思义,复制算法的功能就是把一个区间的元素复制到另外一个区间,它是copy_n()函数,该算法要求迭代器至少为输入迭代器。它的语法功能如下:template<classInputIt,

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

本节我们将继续进行序列查找的学习——adjacent_find()函数。“adjacent”的意思是“相邻的”,adjacent_find(beg , end)函数的功能是:用于在序列[beg , end)中查找第一对相邻元素,这两个元素满足特定条件(默认是绝对相等),有返回值,如果找到第一对相邻相等元素,则返回指向该对元素的第一个元素的迭代器;否则返回容器的end()。它的函数模型是://查找&