STL(三)

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

目录

一、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、付费专栏及课程。

余额充值