C++ STL

C++ STL

使用时注意using namespace std(C++命名空间)

1.vector向量容器

​ vector不仅可以像数组一样用脚标访问元素,还解决了数组长度固定的问题,可以在尾部插入元素,添加或删除时自动调节空间。

​ 引用与创建:

#include<vector>
using namespace std;
int main(){
    //创建整型向量容器v1
    vector<int> v1;
    //创建长度为3的字符串型向量容器v2
    //下标从0开始计数
    //创建使用的是函数,故为小括号(),访问时使用中括号如v2[3];
    vector<char> v2(3);
    //赋值
    v2[2]='a';
    //创建长度为10且每个元素都为5.5的浮点型向量容器
    vector<float> v3(10,5.5);
}
函数意义
begin()返回首元素位置
end()返回最后一个元素下一个元素的位置
push_back(插入元素)在尾部扩张新元素
insert(插入位置,插入元素)在特定位置如v.begin()+2插入元素
erase(位置)删除特定位置的元素并释放内存
clear()清除所有元素
reverse(位置1,位置2)反向排列两个位置之间的元素
sort(位置1,位置2)对两个位置之间的元素排序,默认从小到大,可自己设计比较算法
size()返回向量的大小,即元素个数
empty()判断向量是否为空,是返回true

​ 使用迭代器遍历vector:

#include<vector>
#include<iostream> 
using namespace std;
int main(){
    vector<int> v(10);
    for(int i=0;i<10;i++)v[i]=i;
    //不使用迭代器
	for(int i=0;i<10;i++)cout<<v[i]<<" ";
	//换行
	cout<<endl; 
	//使用迭代器输出
	vector<int>::iterator it;//创捷迭代器
	for(it=v.begin();it!=v.end();it++)cout<<*it<<" "; 
	 
}

所谓迭代器可以理解为泛型的指针。

2.string基本字符容器

​ C语言提供<string.h>库处理字符串数组,C++STL提供了string基本字符类型容器,可以理解为字符串类。

此处与Java泛型有区别,Java的String泛型’S’需要大写。

​ 创建与使用:

#include<string>
#include<iostream>
using namespace std;
int main(){
    //创建字符类型s
    string s;
    //给s赋值
    s="helloword";
    //尾部添加字符,用+
    s=s+'!';
    //尾部添加字符串,用+
    s=s+"abcd";
    //输出s[0]
    cout<<s[0]<<endl;
    //输出s
    cout<<s<<endl;
}

​ 常用函数

函数意义
begin()字符串初始位置
end()最后一个字符下一个位置
append(字符串)尾部添加字符串
insert(位置,字符)将字符插入到字符串位置之前,位置可以用迭代器判断
erase(位置)删除某位置的字符
erase(位置1,位置2)删除两个位置之间的字符
length()返回字符串的长度
empty()判断字符串是否为空,是返回true
replace(位置,数量n,字符串)从给定位置开始,将连续的n个字符替换为指定字符串
find(“字符串”)查找子串,找到返回下标,找不到返回4294967295
s.compare(字符串)比较两个字符串大小,s大返回1,相等返回0,小返回-1
reverse()反向排序字符串

**string对象可以作为vector容器的元素。**效果类似字符串数组;

3.set集合容器

​ set集合容器实现了红黑树的数据结构,插入元素时会自动调整二叉树的排序。

​ 所谓红黑树,即平衡二叉检索树,每个子树根节点值都大于其左子树所有节点的值,小于其右子树所有节点的值,检索效率高于vector,采用中序遍历即可以将元素从小到大排列出来。

set容器不允许插入相同的元素

multiset容器允许插入相同元素,其他和set相同

​ 创建:

#include<set>
using namespace std;
int main(){
    set<int> s;
}

​ 常用函数:

函数意义
insert(元素)向容器中插入元素
begin()初始位置
end()末尾位置下一个位置
find(元素)检索元素,找到返回位置,否则返回s.end()
clear()清除所有元素
erase(元素)删除元素为参数的节点

四、map映照容器

​ map映照容器的键值是由一个键值和一个映照数据组成的,数据结构同样由红黑树实现。

map不可插入相同元素

multimap可以插入相同元素

​ 创建:

#include<map>
using namespace std;
int main(){
    //string类型键值,float类型映照数据。
	map<string,float> m;
   //插入数据
    m["helloword"]=5.5;
}

​ 常用函数与set基本相同。

五、stack栈

​ Last In First Out,即后进先出的数据结构称为栈。

​ 创建:

#include<stack>
using namespace std;
int main(){
    stack<int> s;
}

​ 常用函数:

函数意义
push(元素)入栈,栈顶插入元素
pop()出栈,删除栈顶元素
top()返回栈顶元素
size()返回栈中元素数量
empty()判断栈是否为空,是返回true

六、queue队列

​ First In First Out,即先进先出的数据结构称为队列。

​ 创建队列

#include<queue>
using namespace std;
int main(){
    queue<int> q;
}
函数意义
push(元素)入队,队尾插入元素
pop()出队,删除队首元素
front()返回队首元素
back()返回队尾元素
size()返回队中元素数量
empty()判断队列是否为空,是返回true

七、deque双端队列容器

​ deque双端队列容器与vector一样采用线性表存储结构,不同的是deque采用分块的线性存储结构,每块大小一般为512字节,所有的块由一个Map块管理。

​ 创建与使用:

#include<deque>
using namespace std;
int main(){
    //创建整型双端队列容器d1
    deque<int> d1;
    //创建长度为3的字符串型双端队列容器d2
    //下标从0开始计数
    //创建使用的是函数,故为小括号(),访问时使用中括号如d2[3];
    deque<char> d2(3);
    //赋值
    d2[2]='a';
    //创建长度为10且每个元素都为5.5的浮点型双端队列容器d3
    deque<float> d3(10,5.5);
}
函数意义
begin()返回首元素位置
end()返回最后一个元素下一个元素的位置
push_back(插入元素)在尾部扩张新元素
push_front(插入元素)在头部扩张新元素
pop_front()删除头部元素
pop_back()删除尾部元素
erase(位置)删除特定位置的元素并释放内存
clear()清除所有元素
size()返回向量的大小,即元素个数
empty()判断向量是否为空,是返回true

关于优先队列容器priority_queue:

​ 优先队列容器与队列的区别在于出队不同,优先队列容器出队先出最大元素,而非队首元素,其余完全相同

八、list双向链表容器

​ 创建list:

#include<list>
using namespace std;
int main(){
    //创建空链表
	list<int> l1;
    //创建有十个元素的链表
    list<int> l2(10);
}

​ 常用函数:

函数意义
begin()返回首元素位置
end()返回最后一个元素下一个元素的位置
push_back(插入元素)在尾部扩张新元素
push_front(插入元素)在头部扩张新元素
insert(位置,元素)将字符插入到字符串位置之前,位置可以用迭代器判断
remove(元素)删除值为参数的元素
pop_front()删除头部元素
pop_back()删除尾部元素
erase(位置)删除参数位置的元素
clear()清除所有元素
find(元素)检索元素,找到返回位置,否则返回l.end()
sort()对链表排序
unique()剔除重复元素,保留一个
clear()清除所有元素
find(元素)检索元素,找到返回位置,否则返回l.end()
sort()对链表排序
unique()剔除重复元素,保留一个
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李星且小白blog.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值