C++ STL标准模板库(pair set vector string stack queue map 使用详解)

本文详细介绍了 C++ 标准模板库 (STL) 中的多种容器,包括 pair、set、vector、string、stack 和 map 的使用方法及基本操作,并提供了具体的代码示例。

pair

位于头文件**< iostream>**中用来表示一个二元组或元素对
2.1 使用pair
定义一个pair对象表示一个平面面坐标点:

pair<double, double> p;
cin >> p.first >> p.second;

pair模版类需要两个参数:首元素的数据类型和尾元素的数据类型。pair模版类对象有两个成
员:first和second,分别表示首元素和尾元素。 向上述q中存入数据需要用到q.make_pair(first,second);
对pair排序默认先为first,后second,如果需要先对second排序,需要设一个比较函数

int cmp(pair<int ,int > a,pair<int,int>b){
	return a.second > b.second;
}

set

3.1.2 使用set

/*
set底层实现:红黑树
时间复杂度:
	插入/查询:log(n)
*/
set<int> s;
set<double> ss;

set的基本操作:
s.begin()								//返回指向第一个元素的迭代器
s.clear()								//清除所有元素
s.count()								//返回某个值元素的个数
s.empty()							    //如果集合为空,返回true(真)
s.end()									//返回指向最后一个元素之后的迭代器,不是最后一个元素
s.erase()								//删除集合中的元素
s.find()								//返回一个指向被查找到元素的迭代器
s.insert()								//在集合中插入元素
s.lower_bound()							//返回指向大于(或等于)某值的第一个元素的迭代器
s.size()								//集合中元素的数目
s.swap()								//交换两个集合变量
s.upper_bound()							//返回大于某个值元素的迭代器

vector

vector的基本操作:

/*
vector底层实现:数组
时间复杂度:
	查询:
		下标查询O(1)
		值查询O(n)
	插入O(n)
数据量较大时尽量不要使用vector,vector每一次内存不够之后都会申请双倍内存,然后将当前vector内所有内容拷贝新空间中
*/
#include<vector>
vector <int> s;
s[i]			// 直接以下标方式访问容器中的元素
s.front()		// 返回首元素
s.back()		// 返回尾元素
s.push_back(x)  // 向表尾插入元素x
s.size()		// 返回表长
s.empty()		// 表为空时,返回真,否则返回假
s.pop_back()	// 删除表尾元素
s.begin()		// 返回指向首元素的随机存取迭代器
s.end()			// 返回指向尾元素的下一个位置的随机存取迭代器
s.clear()		// 删除容器中的所有元素
s.swap(v)		// 将s与另一个vector对象进行交换

string

string 可以赋值给char*,但是char*不能赋值给string
string使用:

#include<string>
string s;

cin >> s;
s += "sada";
s.find("sa"); 
/*从左->右查找子串
返回子串首字母的下标。c11中可以定义auto 变量接收c11以下编译标准需定义迭代器接收返回值
查找不到返回npos(string中的宏定义)
判定指定子串是否存在:
if(s.find("sa")!=string::npos)
	*******
下同
*/
s.rfind("sa"); //从右->左查找字串,
if(s[0] == 'a')
	cout <<"s[0] == a"<<endll

stack

/*
stack底层实现:deque
*/
#include<stack>

stack<int> s;

a = 1;
s.push(1) //入栈;
s.pop()   //出栈;
int Top = s.top() //访问栈顶
if(s.empty()==0)	//判空,为空时返回1
	cout << “非空” <<endl;
cout << s.size() <<endl;//访问栈中元素个数;

queue

点击进入queue


map

map为一个映射,相当于python中的字典

可以将map看作是由Key标识元素的元素集合,这类容器器也被称为“关联容器”,可以通过一个Key值来快速决定一个元素,因此非常适合于需要按照Key值查找元素的容器

#include <map>
/*
set底层实现:红黑树
时间复杂度:
	插入/查询:log(n)
*/
map <int,int >m;
m[key] = value;// [key]操作是map很有特色的操作,如果在map中存在键值为
key的元素对, 则返回该元素对的值域部分,否则将会创建一个键值为key的元素对,值域为默认值。所以可以用该操作向map中插入元素对或修改已经存在的元素对的值域部分。
//其实还有一种调用类函数insert的插入方法,但是既然map重载了[]运算符
//就只介绍了最简单的这一种
int i = m[key];
// 要注意的是,当与该键值相匹配的元素对不不存在时,会创建键值为key(当另一个元素是整形时,m[key]=0)的元素对。
map<string, int>::iterator it = m.find(key); // 如果map中存在与key相匹配的键值时,find操作将返
回指向该元素对的迭代器,否则,返回的迭代器等于map的end()(参⻅见vector中提到的begin()end()
操作)//c11中可以用auto it = m.find(key);

m.erase(key);
// 删除与指定key键值相匹配的元素对,并返回被删除的元素的个数。
m.size();// 返回元素个数
m.empty();// 判断是否为空
m.clear();// 清空所有元素

转载注明出处

转载于:https://www.cnblogs.com/bestsort/p/10588856.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值