STL入门总结

首先感谢sls的讲解,以下是听完sls的讲解后做的总结笔记,原本对stl一知半解,现在总算通了。

一.stl是什么

1.C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
2.它的核心是容器,算法,迭代器(平时用数组时用for循环,但在迭代器中要用迭代器)。

二.stl的各种容器。

----vector向量----
1.vecor和数组
vecor其实就是数组,但两者不同之处是vector是不用提前定义长度。
比如有3 行的字母,每行字母数不同,如果每行字母数最大为10000,最小为1,用数组去存储,就得开个3*10000的空间,势必得浪费很多,而用vectorvec[3], vec[i]的size都不一样,会根据你放的元素数量变化,这样节约了空间。由于这个优势,vector在图论中常用。
但在能确定元素数量的情况下,用数组更好,速度快。
2.vector的赋值。
有3种赋值方法,为以下
a[0]=temp;
scanf("%d",&a[0]);
a.push_back(1)。
但是前2种相当于把vector变成了数组,要提前说明它的大小,要vector a(10);
也就丧失了它不定长少内存的优势,那还不如不用。
以下为报错用法。

#include <iostream>
#include <vector>
#include<cstdio>
using namespace std;
int main(){
vector<int> a;
int temp=1;

//a[0]=temp;     //直接return 程序结束
scanf("%d",&a[0]);  //一直没有反应
//a.push_back(1);   //反应正常
bool b;
b=a.empty();
printf("%d",b);
return 0;
}

改正后为

#include <iostream>
#include <vector>
#include<cstdio>
using namespace std;
int main(){
vector<int> a(10);
int temp=1;

//a[0]=temp;     //直接return 程序结束
//scanf("%d",&a[0]);  //一直没有反应
//a.push_back(1);   //反应正常
bool b;
b=a.empty();
printf("%d  %d  %d",b,a[1],a[2]);

return 0;

但同时注意这时候开了空间后,他就往里面都填0,所以empty不会为1了。

----map映射----
1.赋值方法
a.map[s]=id;
b.map.insert(make_pair(s,id));
c.map.insert(pair<int,int>(s,id));
2.特性
map的第一个叫键,第二个叫值,分别相当于函数中的x和y,所以map中没有重复的键,有重复的值。
3.map的应用
常用来计数,比如我们要记录这个数字a出现过几次,常写为num[a]=k;但如果这个a>10e9,这个数组无法建立。
而用map,节约空间。
4.map和pair
pair其实是定义好运算符的map,比较时会先比较first,而用map则在比较时要定义好cmp,是通过键还是值去比较。
pair写法 pair<int,string>a;

----set集合----
1.特性
set中没有重复元素,元素按定义规则排序。
2.赋值方法
se.insert(a);
3.set排序方法
set<int,greater > st;
set<int,less >st;

发布了114 篇原创文章 · 获赞 22 · 访问量 6749

猜你喜欢

转载自blog.csdn.net/qq_43235540/article/details/84473590