C++STL学习笔记
将自己学习的内容和理解记录下来,若有错误之处,欢迎大家指正。
M.JH
万千利器莫过于你的信念
展开
-
C++STL算法篇partition、stable_partition将满足条件的元素向前搬移算法
partition(beg,end,op)和stable_partition(beg,end,op)的特点1:迭代器类型:双向迭代器2:返回值:双向迭代器------指向第一个让op值为false的元素(搬移后)3:算法功能:将[beg,end)中满足op(elem)为true和false的元素交换位置,stable_partition会保持元素的相对次序4:复杂度:线性复杂度,后者在内存...原创 2020-05-05 17:14:53 · 241 阅读 · 0 评论 -
C++STL算法篇random_shuffle将区间内序列打乱算法
random_shuffle(beg,end)和random_shuffle(beg,end,op)的特点1:迭代器类型:随机存取迭代器2:返回类型:void3:算法功能:将[beg,end)区间内的元素序列打乱4:复杂度:线性复杂度#include<iostream>#include<vector>#include<functional>#in...原创 2020-05-05 16:44:43 · 667 阅读 · 0 评论 -
C++STL算法篇next_permutation、prev_permutation将序列变成下一字典序算法
next_permutation(beg,end)和prev_permutation(beg,end)的特点1:迭代器类型:双向迭代器2:返回值类型:bool3:算法功能:将当前序列改成下一字典序或上一字典序4:复杂度:线性复杂度#include<iostream>#include<vector>#include<functional>using...原创 2020-05-05 16:21:55 · 175 阅读 · 0 评论 -
C++STL算法篇rotate旋转元素次序的算法
rotate(beg,newbeg,end)和rotate_copy(beg,newbeg,end,destBeg)的特点1:迭代器类型:前向迭代器,destBeg时输出迭代器2:返回值类型:前者为void,后者为输出迭代器3:算法功能:将newbeg成为新第一元素,[beg,newbeg)区间元素放到end后面,后者将结果输出到目标迭代器4:复杂度:线性复杂度5:调用者必须保证newb...原创 2020-05-03 08:36:34 · 371 阅读 · 0 评论 -
C++STL算法篇replace、replace_if、replace_copy、replace_copy_if替换算法
replace(beg,end,oldValue,newValue)和replace(beg,end,op,newValue)的特点1:迭代器类型:前向迭代器2:返回值类型:void3:算法功能:无op版本,遍历区间[beg,end)中每一个元素,遇到元素值为oldValue将其替换成newValue。有op版本,遍历区间[beg,end)中每一个元素调用op(elem),返回值为true时...原创 2020-05-03 07:53:14 · 287 阅读 · 0 评论 -
C++STL算法篇generate、generate_n赋予区间op产生新值的算法
generate(beg,end,op)和generate_n(beg,num,op)的特点1:迭代器类型:generate—前向迭代器,generate_n----输出迭代器2:返回值:void3:算法功能:调用op()产生新值,并赋给区间[beg,end)或beg开头的目标区间4:复杂度:线性复杂度5:对于generate_n调用者必须保证目标区间空间不小于num,否则应采用插入迭代...原创 2020-05-02 14:35:02 · 392 阅读 · 0 评论 -
C++STL算法篇fill、fill_n赋予新值函数
fill(beg,end,newValue)和fill_n(beg,sum,newValue)的特点1:迭代器类型 fill----前向迭代器,fill_n-----输出迭代器2:返回值类型:void3:算法功能:fill----将区间[beg,end)赋予新值newValue,fill_n-----将beg开头的区间的前sum个元素赋值为newValue4:复杂度:线性复杂度5:对于f...原创 2020-05-02 14:08:38 · 465 阅读 · 0 评论 -
C++STL算法篇swap_ranges互换元素内容算法
swap_ranges(beg,end,sbeg)1:迭代器类型:前向迭代器2:返回值类型:前向迭代器----指向sbeg第一个未被交换的元素3:算法功能:将区间[beg,end)与目标区间sbeg开头的区间的对应元素互换4:复杂度:线性复杂度5:两个区间不能重迭,目标区间的元素个数不少于区间[beg,end)中的元素个数#include<iostream>#includ...原创 2020-05-02 13:51:10 · 273 阅读 · 0 评论 -
C++STL算法篇transform转换元素算法
transform(beg,end,destBeg,op)的特点1:迭代器类型:beg,end为输入迭代器,destBeg为输出迭代器2:返回值:输出迭代器3:算法功能:将源区间[beg,end)内每个元素调用op(elem)并将结果写到以destBeg起始的目标区间中4:复杂度:线性复杂度5:调用者必须保证目标区间有足够的空间否则应采用插入迭代器#include<iostrea...原创 2020-05-02 11:42:30 · 412 阅读 · 0 评论 -
C++STL算法篇copy、copy_backward复制算法
copy(beg,end,destBeg)和copy_backward(beg,end,destEnd)的特点1:迭代器类型:输入迭代器2:返回值类型:copy返回的是输出迭代器,copy_backward返回的是双向迭代器3:这两个算法都将区间[beg,end)的所有元素复制到以destBeg或者destEnd为终点的目标区间去4:注意destBeg和destEnd不可处于[beg,en...原创 2020-05-02 11:10:52 · 402 阅读 · 0 评论 -
C++STL算法篇lexicographical_compare序列大小比较算法
lexicographical_compare(beg,end,sbeg,send)和lexicographical_compare(beg,end,sbeg,send)的特点1:返回值:布尔类型2:迭代器类型:输入迭代器3:无op版本,默认比较方式operator<,以字典比较方式比较区间[beg,end)和[sbeg,send)4:有op版本,op为比较方式,op(elem1,s...原创 2020-05-01 12:21:21 · 673 阅读 · 0 评论 -
C++STL算法篇之mismatch搜寻区间第一处不同点算法
mismatch(beg,end,cmpbeg)和mismatch(beg,end,cmpbeg,op)1:迭代器类型:输入迭代器2:返回值类型:两个迭代器组合的pair,分别指向两个区间的不同元素位置3:无op版本,找到区间[beg,end)和cmpbeg开头的区间第一处对应元素不相等的位置,返回两个元素所在位置的迭代器的组合pair4:有op版本,找到区间[beg,end)和cmpbe...原创 2020-04-30 12:56:01 · 185 阅读 · 0 评论 -
C++STL算法篇之equal区间比较算法
equal(beg,end,cmpbeg)和equal(beg,end,cmpbeg,op)的特点1:迭代器类型:输入迭代器2:无op版本,判断区间[beg,end)内的元素是否都与cmpbeg开头的区间内的对应元素相等,注意cmpbeg开头的区间内的元素不能少于[beg,end)区间的元素个数3:有op版本,判断区间[beg,end)内的元素是否都与cmpbeg开头的区间内的对应元素使得o...原创 2020-04-30 11:42:30 · 605 阅读 · 0 评论 -
C++STL算法篇adjacent_find搜寻满足条件的两个连续元素算法
adjacent_find(beg,end)和adjacent_find(beg,end,op)的特点1:迭代器类型:输入迭代器2:无op版本,返回区间[beg,end)中首个连续两次出现元素的首元素位置3:有op版本,返回区间[beg,end)中首个连续两个元素使得op(elem,nextelem)为真的首元素的位置4:如果未找到两者都返回true#include<iostrea...原创 2020-04-29 11:31:55 · 458 阅读 · 1 评论 -
C++STL算法篇find_first_of搜寻某元素第一次出现算法
find_first_of(beg,end,sbeg,send)和find_first_of(beg,end,sbeg,send,op)的特点1:无op版本,返回同时在区间[beg,end)和[sbeg,send)出现的第一个元素位置的迭代器,同时我们可以采用逆向迭代器获得最后一个元素,未发现则end2:有op版本,返回区间[beg,end)中第一个能与[sbeg,send)内其中一个元素使得...原创 2020-04-29 11:11:01 · 470 阅读 · 0 评论 -
C++STL算法篇之search、search_n、find_end搜寻区间算法
search_n(beg,end,count,value)和search_n(beg,end,count,value,op)的特点1:迭代器类型:输入迭代器2:无op版本返回指向区间[beg,end)中第一组连续count个与value值相同的元素区间的首元素位置的迭代器,未发现则返回end3:有op版本返回指向区间[beg,end)中第一组连续count个让op(elem,value)为t...原创 2020-04-27 10:52:24 · 739 阅读 · 1 评论 -
C++STL算法篇之find、find_if 搜寻算法
find(iter1,iter2,value)和find(iter1,iter2,op)的特点1:前者返回指向区间[iter1,iter2)中第一个元素值为value位置的迭代器,如果没有搜寻成功,返回iter2迭代器,通过iter2为逾尾迭代器,注意不要解引它。2:后者返回区间[iter1,iter2)中第一个满足op(elem)元素的位置迭代器,如果没有搜寻成功,返回iter2迭代器,通过...原创 2020-04-25 12:11:56 · 817 阅读 · 0 评论 -
C++STL算法篇之min_element、max_element 最小值和最大值返回算法
min_element(iter1,iter2)和min_element(iter1,iter2,op)的特点1:返回指向区间[iter1,iter2)中最小值元素位置的迭代器2:无op版本,以operator<比较,有op版本,以op(elem1,elem2)比较3:op不应该改动传入的参数4:如果存在多个最小值则返回第一个找到的最小值#include<iostream&g...原创 2020-04-25 11:27:23 · 876 阅读 · 0 评论 -
C++STL算法篇之count、count_if 计数算法
count(iter1,iter2,value)的特点1:统计[iter1,iter2)区间中值为value的元素个数2:返回型别difference_type,是表现迭代器间距的型别3:关联式容器(set,multiset,map,multimap)提供了一个等效的成员函数#include<iostream>#include<vector>#include&l...原创 2020-04-25 10:57:09 · 966 阅读 · 0 评论 -
C++STL算法篇之for_each遍历操作算法
for_each(iter1,iter2,op)的特点1:for_each()算法非常的灵活,它可以以不同的方式存取、处理、修改每个元素2:返回op的一个副本(可以用来保存仿函数的状态)3:op的返回值会被忽略#include<iostream>#include<vector>#include<algorithm>using namespace s...原创 2020-04-24 21:21:15 · 706 阅读 · 0 评论 -
C++lambdas
什么是lambdas表达式?答:lambdas是函数对象,当我们编写了一个lambdas后,编译器会将该表达式翻译成一个未命名类的未命名对象(仿函数对象)//lambdas完整形式写法[]()mutable throw()-> retType{}// [] ----- 捕获列表// () ----- 参数列表 // mutable -----表示捕获列表里的参数可以改变...原创 2020-04-24 17:43:45 · 479 阅读 · 0 评论 -
C++STL仿函数
什么是仿函数答:仿函数又叫函数对象,是一个定义了operator()的对象。你可以将仿函数视为一般函数,只不过不是将所有语句放在函数体里,而是放在operator()中撰写。//例如struct foo{ void operator()(int i) { cout << i; }};int main(){ int a[5] = { 1,2,3,4,5 };...原创 2020-04-23 16:37:43 · 488 阅读 · 0 评论 -
C++STL迭代器特性(Iterator Traits)
我们都知道迭代器可以区分为不同类型,每个类型都具有特定的迭代器功能。如果我们根据迭代器的不同类型,重载操作行为,将会很有用。充当中间层的作用回答算法提出的问题:算法------iterator traits--------迭代器C++标准库的五种迭代器iterator tag输出迭代器output_iterator_tag输入迭代器input_iterator_t...原创 2020-04-22 21:26:03 · 252 阅读 · 0 评论 -
C++STL迭代器
什么是迭代器?答:迭代器是一种能够遍历某个序列的对象。它可以通过与一般指针一致的接口来完成自己的工作。任何东西,只要行为类似迭代器,就是一种迭代器。不同的迭代器具有不同的能力。迭代器的分类迭代器的类型(category)能力Input——输入迭代器向前读取Output-——输出迭代器向前写入Forward——前向迭代器向前读取和写入Bidireti...原创 2020-04-22 17:02:26 · 142 阅读 · 0 评论 -
C++STL算法篇unique去重算法
unique的作用答:去除相邻的重复元素。所以使用前最好先对容器内容进行排序,使用时应包含头文件algorithm,打开命名空间stdunique(iterator1,iterator2)的使用例子#include<iostream>#include<algorithm>#include<vector>using namespace std;int...原创 2020-04-20 17:47:51 · 751 阅读 · 0 评论 -
C++STL算法篇reverse反转函数
reverse的作用:答:将区间[iterator1,iterator2)内的元素反转。使用时包含algorithm头文件,打开std命名空间。int main(){ string a = "hello world!"; reverse(a.begin(),a.end());//!dlrow olleh cout << a; string b="hello ...原创 2020-04-20 14:10:03 · 721 阅读 · 0 评论 -
C++命名空间
命名空间的作用答:越来越多的软件由程序库、模块、和组件拼凑而成。各种不同事物的结合,可能会导致名称大冲突。命名空间的作用就是来解决这个问题#include<iostream>using namespace std;namespace myname{ class A { private: int a; public: A(int x = 1) :a(x) {}...原创 2020-04-19 14:07:59 · 83 阅读 · 0 评论 -
C++STL容器篇map和multimap
map和multimap的特点: 通常底层是由平衡二叉树完成。将key和value组成的pair对组当成元素,根据元素的key进行排序,这么一来根据已知的key搜寻元素就能有很好的性能。这一性质也使得你不可以直接改动元素的key,因为这会打乱正确的次序。使用容器时应包含头文件map,打开命名空间std。map和multimap的不同之处: map不可以放相同key的元素,multimap可以。...原创 2020-04-19 13:49:13 · 197 阅读 · 0 评论 -
C++STL算法篇remove和remove_if、remove_copy、remove_copy_if移除元素的算法
某些算法会变更目标区间的内容,甚至会删除元素。一旦这种情况出现,我们要注意几个特殊的问题。remove() 移除元素的算法这个算法的特殊在于,它并不是真的删除了元素,而是遇到要删除的元素时让后继元素去覆盖它int main(){ vector<int>coll = {1,2,3,4,5}; remove(coll.begin(), coll.end(),3); copy...原创 2020-04-16 13:53:47 · 664 阅读 · 0 评论 -
C++STL迭代器之配接器(iterator adapters)
迭代器是一个纯抽象概念,任何一个东西,只要其行为类似迭代器,它就是一个迭代器。因此,你可以撰写一些类,具备迭代器接口,但行为不一。C++标准库提供了数个预先定义的特殊迭代器即所谓的迭代器适配器,它们不但其辅助作用,还能让整个迭代器抽象概念更加强大。三种常用的迭代器配接器1:insert iterators(安插型迭代器)2:stream iterators(流迭代器) //需要包含头文件it...原创 2020-04-16 13:09:42 · 217 阅读 · 0 评论 -
C++STL算法篇swap交换算法
函数swap()用来交换两对象的值,其泛型版本定义于algorithm头文件中,使用时需要打开命名空间std。 template<class T> inline void swap(T&a,T&b) { T temp(a); a=b; b=tmp; }注意:swap()中T所依赖的构造函数和赋值操作行为存在,这个调用才可能有效。sw...原创 2020-04-16 11:31:34 · 748 阅读 · 0 评论 -
C++STL的概念
什么是STL?答:STL(Standard Template Library----标准模板库)。STL是C++标准库的核心,它深刻的影响了标准库的整体结构。STL是一个泛型程序库,提供一系列软件方案,利用先进、高效的算法来管理数据。程序员无需了解STL的原理,便可以享受数据结构和算法领域中的这一革新结果。STL组件有哪些?答:STL有六大部件:容器(Containers)、迭代器(Iter...原创 2020-04-15 20:58:11 · 274 阅读 · 0 评论 -
C++STL容器篇set和multiset
set和multiset和特点: 通常底层由红黑树实做而成,会将放入的元素自动排序,所以其优点为搜索元素时具有良好的性能,使用时需包含头文件set,打开std命名空间。set和multiset不同之处: set不能放相同的元素,重复放入相同的元素只会放入一个,multiset可以放入相同的元素。set和multiset的迭代器类型: 双向迭代器set和multiset的初始化templ...原创 2020-04-11 15:45:48 · 153 阅读 · 0 评论 -
C++STL容器篇List
list的特点数据结构为双向链表,当你需要大量进行插入操作时候应选择它,不提供随机访问接口。**list的迭代器:**双向迭代器(所以凡是用到随机存取迭代器的算法都不能调用)list的存储方式和增长方式: 双向链表结构,新建结点插入。list的常用定义:list<T>c; //产生一个空的list,存储T类型对象list<T>c1(c2); //产生一个与c...原创 2020-04-10 14:14:11 · 133 阅读 · 0 评论 -
C++STL容器篇deque
deque的特点: 两端都能快速安插元素和移除元素,对外表现为两端可自由扩展的动态数组,使用时需包含头文件deque,打开std命名空间。deque的迭代器: random access iterator(随机存取迭代器)deque存储方式和增长方式: 用一个vector做控制中心,放入指向每个buffer的指针,每个buffer含有4个迭代器控制其内部与外部vector连接。内部实现较...原创 2020-04-05 13:39:10 · 145 阅读 · 0 评论 -
C++STL容器篇vector
vector特点:可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢,使用时需包含头文件vector,打开std 命名空间vector的迭代器:随机存取迭代器vetor的存储方式:将元素保存在连续的内存空间中,由于元素是连续存储的,所以可以用元素的下标来计算其地址vector的增长方式:当有新元素加入时,vector会判断空余空间是否足够容纳新元素的加入,如果不够那么ve...原创 2020-04-04 15:45:46 · 151 阅读 · 0 评论