c++常用容器的常见用法(积累中...)

vector:(封装数组)

vector<int> r;

vector<vector<int>> r;

访问最后一个元素:r.rbegin() 或r.end()-1 或r.back()

添加元素:r.push_back();

删除最后一个元素:r.pop_back();

删除元素:r.erase(pos);删除 vector 容器中 pos 迭代器指定位置处的元素,并返回指向被删除元素下一个位置元素的迭代器.

清空元素:r.clear();

注意:

1.若没有指定vector的大小,不能直接用[下标]访问。

   在声明中指定大小:

   vector<int> r(n,value);

   vector<vector<int>> r(n1,vector<int>(n2,value));

   也可以利用r.resize(n)+for循环指定大小。

2.memset不能处理vector封装的数组,若需赋同样的值,可以在声明中初始化。

———————————————————————————————————————————

set:(基于平衡二叉树(红黑树),动态维护有序序列)

set<int> rbb;

添加元素:rbb.insert();

!不能使用[下标]进行访问,不能使用比较运算符<或>,只有string,vector,map可以。

删除元素:rbb.erase();

查找元素:rbb.count();用来查找set中某个键值出现的次数。

自定义比较函数:

非结构体:set<int,greater<int>> rbb;(默认是set<int,less<int>> rbb;)

结构体:

        struct Info
        {
            string name;
            float score;
            //重载“<”操作符,自定义排序规则
            bool operator < (const Info &a) const
            {
                //按score从大到小排列
                return a.score<score;
            }
        }
        set<Info> s;
        ......
        set<Info>::iterator it;

———————————————————————————————————————————

map:(基于平衡二叉树(红黑树),动态维护有序序列)

map<pair<int,string>> shu;

插入元素(pair类型):shu.insert();或shu[ ]=  ;

删除元素:shu.erase();

map和set配置的都是双向迭代器,假设p为两种类型中的某一种类型的迭代器,则其只能进行++,--操作,只能用==或!=两种比较运算符。

unordered_map: (与map的区别:增删改查O(1)、无序)

unordered_map<string,int> shu;

插入元素:shu["  "]=  ;

查询元素:shu["  "]返回其对应的值。

判断有无:shu.count();(如果存在具有给定键的值,则此函数返回1,否则返回0。)

基本上,map能用的,unordered_map都能用。

不支持lower_bound()/upper_bound()。

补充:unordered_map基于散列表,增删改查的时间复杂度一般为O(1),但最坏为O(n)!!!!

 queue:(队列)

queue<int> que;

插入元素:que.push();

删除队列头部元素:que.pop();

访问队头:que.front();

访问队尾:que.back();

判断是否为空:que.empty();(若为空,则为真)

注意:queue不提供.clear();

priority_queue:(优先队列,优先级大的在队前,默认第二个参数为less<int>)

priority_queue<int> que;

插入元素(并排序)que.push();

访问队头:que.top();

若需要优先级相反,priority_queue<int,vector<int>,greater<int>> que;

———————————————————————————————————————————

string:

 srting s;

复制字符串子串:s.substr(pos,len);(pos为起始位置,len为长度)

———————————————————————————————————————————

 stack:

stack<int> sta;

添加栈顶元素:sta.push();

访问栈顶元素:sta.top();

删除栈顶元素:sta.pop();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值