C++STL用法解析

vector容器

vector容器与数组类似,包含一组地址连续的存储空间。对vector可以进行查询、插入、删除等操作。
1.insert函数
三种用法:1.iterator insert(iterator loc,const TYPE &val);
2.void insert(iterator loc,size_type num,const TYPE &val);
3.void insert(iterator loc,input_iterator start,input_iterator end);
e.g:

vector<int>a;
a.insert(a.begin(),99);//头插元素99
a.insert(a.end(),97);//尾插元素97
a.insert(a.end(),4,5);//将4个5插入尾部
a.push_back(10);//添加元素10到vector尾部
a.pop_back();//删除最后一个元素
a.erase(number.begin());//删除第一个元素
a.size();//返回vector当前元素个数。
a.capacity();//返回vector所能容纳的元素数量。
a.empty();//判断vector是否为空。
a.front();//返回第一个数
a.back();//返回最后一个元素
a.clear();//清空
reverse(a.begin(),a.end()); //翻转元素
vector<int>number(5,99);
//构造number,5个值为99的元素
vector<int>number1(number);
//构造number1,拷贝number容器
vector<int>number2(number.begin(),number.end());
//构造number2,拷贝number容器中开始位置到末尾的值
for(int i=0;i<a.size();i++)
cout<<a[i]<<" ";//输出
for(int i=0;i<a.size();i++)
cout<<a.at(i)<<endl;//at函数输出更安全
for(vector<int>::iterator i=a.begin();i!=a.end();i++)
cout<<*i<<endl;//迭代器输出(相当于指针)
for(auto x:a) cout<<x<<" ";//C++11新语法更简洁高效 

2.数组去重

#include<algorithm>//unique为它的库函数
sort(a.begin(),a.end());//必须先排序
a.erase(unique(a.begin(), a.end()), a.end()); //因为unique函数返回值为第一个重复元素的下标,因而清除该返回地址到容器结尾中的元素即可。
//除去重复数字

3.支持比较运算

vector<int>a(3,4),b(4,3);
if(a>b) puts("a>b");
//按照字典序比较

queue(队列)

队列:先进先出

queue<int>q;
q.push();//向队尾插入元素
q.front();//返回队头元素
q.pop();//弹出对头元素
q.back();//返回队尾元素
q.size();//返回元素个数
q.empty();//判断是否为空

priority_queue(优先队列,默认大根堆)

#include<queue>
priority_queue<int>heap;//默认大根堆
//升序队列,小顶堆
2 priority_queue <int,vector<int>,greater<int> > q;
3 //降序队列,大顶堆
4 priority_queue <int,vector<int>,less<int> >q;
heap.push();//插入一个元素
heap.top();//返回堆顶元素
heap.pop();//弹出堆顶元素
heap.size();//返回队列内元素个数
heap.empty();// 队列是否为空

可借鉴大佬:添加链接描述

stack(栈)

#include<stack>
stack<int>a;
a.size();//返回元素个数
a.empty();//栈是否为空
a.push();//向栈顶插入元素
a.top();//返回栈顶元素
a.pop();//弹出栈顶元素

map(映射)

特性:有序性,所有元素都会根据元素的减值自动被排序。map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一个元素会被视为键值,第二个元素会被视为实值。map不允许两个元素拥有相同的key(键值)
由该特性:map内部的实现自建一棵红黑树(一种严格意义上的平衡二叉树),这棵树具有对数据自动排序的功能。
unordered_map:元素无序,查找速度更快

map<int,string>m;
m[1]="student_one";//用数组方式插入数据
m.insert(pair<int,string>(5,"小狗同志"));//用insert插入新元素
m.size();//m的大小,即元素个数
m.count(1);查找(判断关键字是否在map中出现),若出现过就返回1,否则返回0
m.erase(1);//删除元素
m.empty();  //判空(为空返回1,不为空返回0)
m.clear();  //清空

set(集合)

set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就像一个集合一样,所有的操作都是严格在logn时间之内完成的,效率非常高,set插入的元素不能相同

set<类型>标识符 
//如set<int>a;   定义一个元素为整数的集合a
clear();  //清空所有元素
count();  //返回某个值元素的个数(set不包含重复元素,所以结果为0/1)
empty();  //判断集合是否为空
erase();  //删除集合中的元素
insert();  //在集合中插入元素
size();  //集合中元素的数目
max_size();  //返回集合能容纳的元素的最大限值
swap();  //交换两个集合变量
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Think-killer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值