STL 整理(摘自蓝皮书)

本文深入讲解C++标准模板库(STL)的多个组件,包括vector、queue、deque、set、map和栈的基本定义、使用方法及操作细节。适用于C++初学者和希望深化理解STL的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ STL 整理

一、vector

  1. 定义
    #include< vector >
    vector < int > a;//相当于开一个长度动态变化的int数组
    vector < int > b[233];//相当于第一维长233,第二维长度动态变化的int数组(类似于二维数组)
    struct node{……}
    vector < node > c;//也可以用结构体作为类型

  2. 具体操作
    ① vector.size():返回实际长度
    ② vector.empty():判断vector是否为空
    ③ vector.clear():把vector清空
    ④ vector.front():返回第一个元素(相当于a[0])
    ⑤ vecor.beck():返回最后一个元素(相当于a[a.size()-1])
    ⑥ vector.push_back(x):将x插入vector尾部
    ⑦ vector.pop_back():删除vector的最后一个元素

  3. vector也可保存有向图:
    ① 插入

    void insert(int x,int y,int z){
        ver[x].push_back(y);
        edge[x].push_back(z);
    }
    

② 遍历

//从x出发的边
   for (int i=0;i<ver.size();i++){
	   int y=ver[x][i],z=edge[x][i];
   }

二、queue

  1. 定义
    #include
    queue < int > q;
    struct node{……} queue q;
    priority_queue <int ,vectorm< int > , greater/less > q;//定义一个小根堆/大根堆
    typedef pair < int , int > pii;
    priority_queue <pii ,vectorm< pii > , greater/less > q;//定义一个pair类型的小根堆/大根堆

(2) 具体操作
① q.front();//返回第一个元素(堆中是q.top())
② q.pop();//弹出第一个元素
③ q.push(x);//将x插入队尾
④ q.size();//返回长度
⑤ q.empty();//判断是否对空

三、deque

  1. 定义
    #include< deque >
    //定义与与上面的类似

  2. 具体操作
    ① q.front():返回队头元素
    ② q.back():返回队尾元素
    ③ q.push_back():从队尾入队
    ④ q.push_front():从队头入队
    ⑤ q.pop_front:从队头出队
    ⑥ q.pop_back:从队尾出队
    ⑦ q.clear()::清空队列

四、set(集合)

  1. 定义
    #include
    set < int > s;
    struct node{……} set < node > s;

  2. 具体操作
    ① s.size():返回集合长度
    ② s.empty():判断集合是否为空
    ③ s.clear():清空集合
    ④ s.insert(x):把元素插入集合中(如果已经出现,则不会重复插入)
    ⑤ s.find(x):在集合中查找x,并返回其位置;如果不存在,则返回s.size();(也许把)
    ⑥ s.lower_bound:查找集合中≥x的元素中最小的一个,并返回其位置
    ⑦ s.upper_bound:查找集合中>x的元素中最小的一个,并返回其位置
    ⑧ s.erase(x):删除集合中所有等于x的元素
    ⑨ s.count(x):饭盒集合中元素x的个数

五、map

  1. 定义
    #include
    map < string , int > M;//关键字为string,映射到int的一个map。
    例如:map[“ZYB”]=666;string s=“ZYB”;cout<<map[s]; 此时输出的是666
    同样,还能一下定义map
    map < int , string > M;
    map < int , int > M;
    map < long long , int > M;
    map < double , int > M;
    ………………

  2. 具体操作
    ① map.size(): 返回map的长度
    ② map.find(x):查找关键字x在map里的位置,如果没找到,则返回map.size/end()
    ③ []操作符:强行引用即可

六、栈

  1. 定义
    #includ
    stack < int > s;
    struct node{……} stack < node > s;

  2. 具体操作
    ① s.empty():判断是否栈空
    ② s.size():返回栈中元素的个数
    ③ s.top():返回栈顶元素
    ④ s.pop():弹出栈顶元素
    ⑤:s.push(x):将x压入栈顶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值