c++ STL与常用库函数

本文介绍了C++中的STL容器,包括vector、queue、stack、deque、set、map及其头文件<unordered_map>。vector作为变长数组,提供随机访问,queue和stack遵循FIFO和LIFO原则,deque支持两端高效插入删除。此外,文章还讨论了set和map的数据结构以及位运算和常用库函数的应用。
摘要由CSDN通过智能技术生成

vector(变长数组)

  • 概述

数组属于静态内存空间,一经分配内存便无法改变大小,为了使数组更为灵活,封装为vector。

vector底层实现为数组,封装之后的vector在外部看来是一个可变长的顺序容器。在创建vector时会申请一块长度为n的连续内存区域。

vector内部维护两个指标cur_len,max_len,分别表示当前元素的个数和总共可以填充元素个数。

当cur_len = max_len时,数组扩容,申请两倍大小的内存空间,将原来元素拷贝。

当cur_len = max_len / 4, 数组缩容,回收内存空间,并进行元素拷贝。

  • 使用注意点:

由于每次扩大和缩小都是成倍的,因此数组大小变化相对与每次操作是平均O(1)。
功能:变长数组,支持随机访问,不支持在任意位置O(1)插入。为了保证效率,元素的增删一般应该在末尾进行

#include<vector>    //头文件

vector<int> a;      //相当于一个长度动态变化的int 数组
vector<int> b[233]; //相当于第一维长233,第二位长度动态变化的int数组
struct rec{
   };
vector<rec> c;      //自定义的结构体类型也可以保存到vector中

----------------------

vector<int> a;

a.size();       //长度(元素个数)
a.empty();      //判断是否为空,空返回1
a.clear();      //清空

vector<int>::iterator it;   //迭代器、支持相加减

*it             //相当于a[it]

a.begin();       //返回第一个元素的迭代器
a.end();         //返回最后一个元素后一个位置的迭代器
a.front();       //返回第一个元素
a.back();        //返回最后一个元素
a.push_back(x);  //把元素x插入到vector a的尾部、O(1)
a.pop_back();    //删除vector a的最后一个元素

//三种遍历

for(int i = 0; i < a.size(); i++ )

for(auto it = a.begin(); it != a.end(); it++ )

for(int x : a)

queue(队列)

  • 概述:

与vector的实现基本类型,只是暴露出一部分接口供外部访问,使得queue满足抽象的先进先出数据结构。

  • 使用注意点:

先进先出
头文件queue主要包括循环队列queue和优先队列priority_queue两个容器

#include<queue> //头文件

queue<int> q;
struct rec{
   };
queue<rec> q;

priority_queue<int> q;      // 大根堆、优先弹出最大值
priority_queue<int, vector<int>, greater<int>> q;   // 小根堆、优先弹出最小值
priority_queue<pair<int, int>> q;

struct rec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值