STL
东东7_7
这个作者很懒,什么都没留下…
展开
-
STL模板——常用算法
常用的遍历算法//for_each() 用于遍历//transfrom() 用于将一个容器搬运到另一个容器中void test2(){ vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } for_each(v.begin(), v.end(), [](int va){cout << va <<" "; }); cout原创 2020-11-30 21:17:19 · 81 阅读 · 0 评论 -
函数对象,谓词,内建函数对象,适配器
函数对象(仿函数)重载函数调用操作符号的类,就是类似于函数的对象,其实就是重载了()这个操作符,使类对象可以像函数那样使用,其中需要一个参数称为一元仿函数,两个参数为二元仿函数class Print{public: void operator()() { cout <<"hellow world"<<endl; }};void pri (){ cout<<"hellow world"<<endl;}int main{ Prin原创 2020-11-29 20:54:22 · 93 阅读 · 0 评论 -
map/multimap容器
前言map的特性和set一样,就是他们都会自动的排序,其中map所有的元素都是pair,同时拥有实值和键值,第一个元素为实值,第二个为键值,map不允许有两个相同的元素map和list有一些相似,就是他们中有删除现象出现的时候。不会影响迭代器,其实map和multimap的底层实现原理都是红黑树,multimap和map区别就是key可以重复常用的接口map构造函数map<T1, T2> mapTT;//map默认构造函数:map(const map &mp);//拷贝构造函原创 2020-11-28 13:35:12 · 80 阅读 · 0 评论 -
set/multiset容器
set容器set容器的特性,所有元素的都会根据元素的键值自动被排序,set的元素不像map那样可以同时拥有实值和键值,set元素及是键值也是实值,所以我们不能通过迭代器改变set元素值,会破坏set结构multiset容器他和set容器基本一样,唯一的区别就是multiset容器可以重复,他们的底层实现都是红黑树常用函数接口set构造函数set<T> st;//set默认构造函数:mulitset<T> mst; //multiset默认构造函数:set(const原创 2020-11-25 21:50:03 · 114 阅读 · 0 评论 -
list容器
前言链表是一种物理存储单位上非连续,非顺序的存储结构,相比于vector就负责多了,它可以很精准的使用空间,而不浪费,list是一个双向链表list的迭代器list容器不能像vector一样以普通指针作为迭代器,因为其结点不能保证在同一块连续的空间上,他的结点都是去访问下一个成员(通过指针),由于list是双向链表,所以它具有向前和向后的能力,还有一点就是插入和删除不会导致原来的迭代器失效list构造函数list<T> lstT;//list采用采用模板类实现,对象的默认构造形式:l原创 2020-11-25 20:21:23 · 104 阅读 · 0 评论 -
deque容器
前言vector容器是单向开口的连续空间,deque是一个双向开口的容器,就是可以在头部和尾部做插入和删除的操作,当然vector也可以在开口处插入,但是效率奇低vector和deque最大的差别就是允许在头部进行插入,其二是他没有容量的概念,他是动态的将分段连续的空间组合起来,但是缺点就是他的运算很麻烦,他的迭代器不是普通的指针,他们的运算量不是一个量级的,所以在用到排序算法的时候,应当尽可能使用vector然后再倒回dequedeque的实现原理deque是一段一段连续的空间组成的,一旦有新的数原创 2020-11-24 22:50:17 · 230 阅读 · 1 评论 -
vector容器
前言vector的数据安排以及操作方式,与数组十分相似,他们的唯一差别就是数组是静态空间,而vector是动态空间,当他要去扩容空间的时候,编译器内部会帮助我们去寻找一片新的空间,自动释放以前旧的空间。在vector的实现技术中,关键在于他对空间的重新分配,所以我们就有了很多空间分配策略vector迭代器vector维护一个线性空间,所以无论元素类别如何,普通指针都可以作为vector的迭代器,所以++,–,+=,-=普通的指针都具备,所以vector提供的是随机访问迭代器vector的数据结构原创 2020-11-24 14:27:50 · 78 阅读 · 0 评论 -
C++类模板
定义与函数模板类似,类也可以通过参数泛化,从而可以构建出一族不同型别的类实例(对象)类模板实参可以是某一型别或常量(仅限int或enum)实例//定义类模板,并向其中传入常量num,泛化两个类型,T1,T2template <typename T1, typename T2,int num=1000>class stu {public: T1 math; T1 chinese; T2 name; stu( T1 math_t,T1 chinese原创 2020-11-22 13:59:27 · 73 阅读 · 0 评论 -
模板观念和函数模板
定义模板是C++的一种特性,允许函数或类(对象),通过泛型的形式表现或运行模板可以使函数或类在对应不同的型别的时候正常工作,无需为每一个型别都写一份代码两种模板类模板:使用泛型参数的类函数模板:使用泛型参数的函数模板实例化模板的声明其实并未给出一个函数或类的完全定义,只是提供了一个函数或类的语法框架实例化是从模板构建出...原创 2020-11-21 15:22:11 · 58 阅读 · 0 评论