[C++]c++中STL容器的基本用法

本文详细介绍了C++中的几种容器,包括队列、优先队列、栈、向量、集合和映射的基本用法及操作。队列遵循FIFO原则,优先队列优先删除优先级高的元素,栈是后进先出的数据结构,向量是动态数组,集合是自动排序且不允许重复元素,映射则是键值对的有序容器。此外,还讲解了如何进行元素的插入、删除、查找以及各种操作符的重载。
摘要由CSDN通过智能技术生成

队列

  1. 创建队列对象: queue<元素类型> 队列名;
  2. 队列添加元素: 队列名.push(元素名);
  3. 去掉队首元素: 队列名.pop();
  4. 访问队首元素: 队列名.front();
  5. 访问队尾元素: 队列名.back();
  6. 判断是否为空: 队列名.empty();
  7. 返回队列大小: 队列名.size();

优先队列

特点:

  1. 在队尾加入元素
  2. 从队头删除元素
  3. 每次去除的是具有最高优先权的元素(不一定先进先出)

基本用法

  1. 创建队列对象: priority_queue<元素类型> 队列名;
  2. 队列添加元素: 队列名.push(元素名);
  3. 去掉第一个元素: 队列名.pop();
  4. 判断是否为空: 队列名.empty();
  5. 返回队列大小: 队列名.size();
  6. 访问最优元素: 队列名.top();

运算符重写

struct pos {
	int x, y, z;
	bool operator < (const pos &p1, const pos &p2) {
		return p1.z < p2.z;
	}
};

  1. 创建栈对象: stack<元素类型> 栈名;
  2. 栈顶添加元素: 栈名.push(元素名);
  3. 删除栈顶元素: 栈名.pop();
  4. 访问栈顶元素: 栈名.top();
  5. 判断是否为空: 栈名.empty();
  6. 返回栈的大小: 栈名.size();

栈和队列一样,没有clear之类的函数,需要循环出栈实现清空操作。
访问空栈的top()就会RE

Vector(向量||变长数组)

基本用法:

  1. 向量的定义: vector a;
  2. 向量的初始化: vector abc;//默认值为0
  3. 向量的初始化: vector abc(10);初始化了10个默认值为0的元素
  4. 向量的初始化: vector abc(10, 1); 初始化了10个值为1的元素
  5. 去向量首元素的迭代器: 向量名.begin();
  6. 取向量尾元素下一地址: 向量名.end();
  7. 取向量首元素的值: 向量名.front();
  8. 取向量尾元素的值: 向量名.back();
  9. 下标形式访问: int value0 = 向量名[0];
  10. 往尾部添加一个元素: 向量名.push_back(value);
  11. 删除尾部的第一个元素: 向量名.pop_back();
  12. 判断向量是否为空: 向量名.empty();
  13. 求向量元素个数: 向量名.size(); //实际元素个数,不是容量
  14. 翻转向量: reverse(a.begin(), a.end());

集合

特性:

  1. 有序
  2. 自动排序
  3. 支持插入、删除、查找等操作明并且严格控制在logn时间内完成,效率非常高
  4. 只能通过迭代器(iterator)访问
    例如:
for(set<int>::iterator it = st.begin(); it != st.end(); it++)
{
	printf("%d ", *it);
}

注意:set不支持it < st.end()的写法

基本用法

  1. set的声明: set s;
  2. set的清空: s.clear();
  3. 插入一个元素x: s.insert(x);//若果集合之前没有,则成功插入并排序,否则不插入
  4. 查询是否有元素x: int hav = s.count(x);/0或1
  5. 判断是否为空集: bool isempty = s.empty();
  6. 求集合元素个数: int n = s.size();
  7. 删除元素x: s.erase(x);

主要用途

自动去重并按升序排序

String类

对象声明

string str;
string strl = “qwer”;

求对象长度

str.length();
str.size();
两者几乎相等

string对象连接

直接用+和+=

String对象的比较:

直接用< <= == != >= > 比较

求子串

string s1 = “this is iOK”;
string s2 = s1.substr(2, 4); // s2 = “is i”
s2 = s1.substr(2); // s2 = “is is OK”;

插入字符串

string s1(“Limitless”), s2(“00”);
sl.insert(2, “123”); // s1 = “Li123mitless”
s1.insert(3, s2); // s1 = “Lil0023mitless”
s1.insert(3, 5, ‘X’); // s1 = “LilXXXXX0023mitless”

删除子串

string s1 = “Real Steel”;
s1.erase(1, 3); // s1 = “R Steel”
s1.erase(5); // s1 = “R Ste”

查找字符串

string str = “the apple thinks apple is delicious”;
string key = “apple”;
int pos1 = str.find(key);
int pos2 = str.find(key, 10);

Map

map是一个键值对(key/value)容器, 对于迭代器来说,可以修改value,而不能修改key。Map会根据key自动排序
map类型通常可以理解为关联数组:可使用键作为下标来获取一个值。关联的本质在于:元素的值与某个特定的键值相关联,而非通过元素在数组中的位置来获取。

基本用法

map<int, string> m;
m.count(k); //返回m中键值等于k的元素的个数(1或0)
m.find(k); //存在则返回指向该元素的迭代器,否则返回结束地址end();
m.erase(k); //删除m中键为k的元素, 返回删除元素的个数(1或0);
m.erase§; //从m中删除迭代器p所指向的元素
m.insert(e); //e是一个用在m上的value_type类型的值(一个pair)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值