STL(三)

本文详细介绍了STL中的list,set,和map容器,包括它们的基本概念、构造方法、数据操作(如赋值、插入、删除、查找)、大小操作、数据存取以及排序规则,特别强调了自定义类型的排序和特定场景的应用实例。

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

目录

一、list容器

1.基本概念

 2.构造函数

3.赋值和交换

4. 大小操作

5.插入和删除

6.数据存取

7.反转和排序

二、set容器

1.构造和赋值

2.大小和交换

3.插入和删除

4.查找和统计

5.set和multiet的区别

6. pair对组创建

7.指定排序规则

(1)内置类型指定

(2)自定义类型指定

 三、map容器

1.构造和赋值

2. 大小和交换

3.插入和删除

4.查找和统计

5.排序


 一、list容器

1.基本概念

list将数据进行链式存储。链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。

链表的组成:链表由一系列结点组成。结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

list优点:采用动态存储分配,不会造成内存浪费和溢出;可以对任意位置进行插入删除元素。缺点:容器遍历速度没有数组快,占用空间比数组大。

STL中的链表是一个双向循环链表。 由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。

list有一个重要的性质,插入操作和删除操作不会造成原有list迭代器的失效,这在vector是不成立的。

STL中List和vector是两个最常被使用的容器,各有优缺点

 2.构造函数

list构造方式同其他几个STL常用容器,熟练掌握即可。

3.赋值和交换

list赋值和交换操作能够灵活运用即可。

4. 大小操作

5.插入和删除

6.数据存取

list不能使用[]或at访问容器中的元素。原因是list本质是链表,不是用连续线性空间存储数据,迭代器也是不支持随机访问的。

7.反转和排序

对于自定义数据类型,必须要指定排序规则,否则编译器不知道如何进行排序。

将Person自定义数据类型进行排序,Person有姓名、年龄、身高这三个属性。

8.士兵队列训练问题

#include <bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
int n,nums;
void solve(list<int> &l,int key){
    int i=0;
    list<int>::iterator it=l.begin();
    while(it!=l.end()){//报完数以后才判断size是否小于3,而不是士兵小于3人以后立刻停止报数
        i++;
        if((i%key==0)){it=l.erase(it);}
        else{it++;}
    }
}
int main()
{
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>nums;
            list<int> l;
            for(int i=1;i<=nums;i++)
                l.push_back(i);
            while(l.size()>3){
                solve(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值