作者:月亮哥哥是团宠他男人 | 来源:互联网 | 2023-10-10 17:47
在我刚走上算法修炼这条路时,走了不少的弯路,那时候因为不知道C++ STL库的存在,为了满足题目对运行时间的要求,只能使用C语言,而C语言最大的弊端是很多东西都要自己去实现,所以在做算法题时,我常常会感觉到很累,一度想要放弃。
但自从用上了STL库以后,情况改善了许多,STL即标准模板库,它提供了多种容器和算法来满足编程者的要求,本篇文章不做教程,因为好的教程太多了,这里推荐C语言中文网:http://c.biancheng.net/cplus/80/,花上两个小时就可以完全学会!
关于vector的一些简单总结:
适用场景:
vector:在元素个数不确定时做变长数组;再输出元素个数不确定而又需要每个元素之间打印空格时,做暂存容器!
vector数组:存储树,图!
头文件:
#include
定义:
vector name;
例如:
vector name;
vector name;
vector name;//node为结构体的类型
vector > name; // >>之间要加空客
访问:
迭代器定义方式:
vector:: iterator it;
类似于指针,注意左闭右开!
常用函数:
push_back():末尾添加元素
pop_back():删除末尾元素
size():返回vector长度
clear():清空vector里面的所有元素
insert(it,x):用来向任意的迭代器it处插入一个元素x。
erase():删除单个元素,或某个区间的所有元素。
关于set的一些简单总结:
适用场景:
set:需要去重但是不方便直接开数组的情况可使用set,set可实现自动去重并按升序排序。
set中元素唯一,如果需要处理不唯一的情况,则需要使用multiset
头文件:
#include
定义:
与vector相同,不再赘述。
访问:
set只能通过迭代器访问:set::iterator it;
除vector和string之外的STL容器都不支持*(it+i)的访问方式,因此set的枚举方式唯一:
#include
#includeusing namespace std;
int main()
{set st;st.insert(1);st.insert(3);st.insert(5);st.insert(7);st.insert(1);//不支持 it ::iterator it=st.begin(); it!=st.end(); it++){printf("%d",*it);}return 0;}
常用函数:
insert(x) : 将x插入set容器中。
find(value) : 返回set中对应值为value的迭代器。
erase() : 删除单个元素,或某个区间的所有元素。
size() :返回set内元素的个数。
clear() : 清空set中的所有元素。
关于string的一些简单总结:
适用场景:替代字符数组char str[]来存放字符串,封装了一些常用功能,方便操作!
头文件:
#include
定义:
string str;
访问:
#include
#include
using namespace std;
int main()
{string str="asdfg";for(int i=0;i>str;//输入输出只能用cin cout cout< 也可以用迭代器访问,用法同set,此处不赘述!
常用函数:
- 字符串拼接:str3=str1+str2
- 比较操作:按字典序比较大小。
- length()/size():湖区存放的字符数
- insert():
insert(pos,string):在pos号位置插入字符串string
insert(it,it2,it3):it为原字符串中欲插入的位置,it2和it3为待插入的字符串的首尾迭代器。
-
erase():删除某个字符或一段字符。
-
clear():清空字符串!
-
sub(pos,len)返回从pos号位开始、长度为len的子串。
-
find(str2):当str2是str的子串时,返回其在str中第一次出现额位置;如果str2不是str的子串,返回string::npos。
-
replace(pos,len,str2):把str从pos号位开始、长度为len的子串替换为str2。
关于map的一些简单总结:
适用场景:
map翻译为映射,也是STL容器。map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)。
例:可建立字符串到数字的映射、字符串到字符串的映射。
头文件:
#include
定义:
mapmp;
typename1为映射前的类型(键key),typename2为映射后的类型(值value).
访问:
1.下标访问:例value=map[key]
2.迭代器访问:mapiterator it;
常用函数:
1.find(key):返回键为key的映射的迭代器.
2.erase():删除某个元素或者某个区间的所有的元素。
3.size():返回map中映射的对数。
4.clear():清空map中的所有元素
关于queue的一些简单总结:
适用场景:建立一种先进先出的数据结构。可用于广度优先搜索时(BFS)
头文件:
#include
定义:
queue name;
访问:
front():访问队首元素。
back():访问队尾元素。
常用函数:
- push(x):将x入队。
- front(),back():分别获得队首元素和队尾元素。
- pop():令队首元素出队。
- empty():检测queue是否为空,是则返回true,否则返回false。
- size():返回queue内的元素的个数。
关于stack的一些简单总结:
适用场景:
实现一种先入后出的数据结构,可用来模拟实现一些递归。
头文件:
#include
定义:
stack name;
常用函数:
- push(x):将x入栈。
- top():获得栈顶元素。
- pop():用以弹出栈顶元素。
- empty():判断是否为空。
- size():返回栈内元素个数。