day10 STL(Standard Template Library)

STL(Standard Template Library)是C++标准库中的一个重要组成部分,它提供了一组通用的模板类和函数,用于进行常见的数据结构和算法操作。STL采用泛型编程的方式,可以以通用的方式操作不同类型的数据。

目录

容器(Containers)

顺序容器

适配器(Adapters)

关联容器

迭代器(Iterator)

迭代器常见操作

常见的迭代器

算法


容器(Containers)

概念:

  • 用于存储和管理数据的类模板,如vector、list、deque、set、map等。
  • 容器提供不同的数据结构和访问方式,可以根据需求选择最适合的容器。

顺序容器

vector(顺序表):动态数组,支持快速随机访问,可动态调整大小。

list(链表):双向链表,支持快速插入和删除操作,但无法进行随机访问。

deque(双端队列):双端队列,支持在两端进行快速插入和删除操作

适配器(Adapters)

概念:适配器是一种组件,用于将已有的容器或算法接口转换为另一种接口形式,以满足不同的需要或使用习惯。适配器旨在提供一种转换机制,使得不同的组件能够互操作或适应特定的场景。

statck:基于deque或list实现的栈数据结构适配器,提供后入先出(LIFO)的存储和访问方式。

queue:基于deque或list实现的队列数据结构适配器,提供先入先出(FIFO)的存储和访问方式。

priority_queue:基于vector或deque实现的优先队列适配器,按照优先级进行排序和访问。

关联容器

概念:关联容器(Associative Containers)是一种特殊的容器,它们基于键值对(key-value)的概念来存储和组织数据。关联容器提供了高效的查找和插入操作,以支持快速访问和操作数据。

map:映射容器,存储键值对(key-value),按照键进行排序。键唯一,当插入相同的键时会覆盖原来的值。可以快速根据键进行查找、插入和删除操作。

set //tree:集合容器,只存储唯一的键(key),且按照特定的比较准则进行排序。可以快速进行插入、查找和删除操作。

multimap:多重集合容器,存储不唯一的键(key),且按照特定的比较准则进行排序。可以快速进行插入、查找和删除操作。

multiset:

  • 是一个有序容器,可存储不唯一的元素。
  • 多重集合容器中的元素按照一定的排序准则进行排序,通常是按照元素的值进行排序。
  • 具有快速的插入、查找和删除操作。
  • 插入操作不会覆盖重复的元素,允许存储多个相同的元素。
#include <iostream>
#include <set>

int main() {
    std::multiset<int> numbers;

    numbers.insert(5);
    numbers.insert(2);
    numbers.insert(7);
    numbers.insert(3);
    numbers.insert(3); // 允许存储多个相同的元素
    numbers.insert(1);

    // 遍历输出多重集合容器中的元素
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

迭代器(Iterator)

迭代器是一种用于遍历容器元素的对象,它提供了统一的访问接口,使得算法能够操作不同类型的容器。通过使用迭代器,可以便捷地遍历和访问容器中的元素,而不需要关心容器的具体实现细节。

遍历容器元素:使用迭代器可以逐个访问容器中的元素,实现对容器元素的遍历。

访问元素值:迭代器提供了获取和修改元素值的接口,可以对容器中的元素进行读取和写入操作。

算法操作:很多算法要求提供迭代器作为参数,以便在容器上进行操作。通过传递合适的迭代器,可以使算法在不同类型的容器上工作。

容器范围定义:迭代器可以定义容器的起始位置和结束位置,用于指定所需操作的元素范围

迭代器常见操作

取决于迭代器的类型):

解引用(Dereference):使用*操作符访问迭代器指向的元素值。

前进(Increment):使用++运算符将迭代器向前移动到下一个元素。

后退(Decrement):使用--运算符将迭代器向后移动到前一个元素。

比较(Comparison):使用比较运算符(如==、!=、<、>等)比较两个迭代器的位置关系。

常见的迭代器

输入迭代器(Input Iterator):只能进行读取操作,不支持写入操作。

输出迭代器(Output Iterator):只能进行写入操作,不支持读取操作。

前向迭代器(Forward Iterator):支持读取和写入操作,并可以逐个向前移动迭代器。

双向迭代器(Bidirectional Iterator):类似于前向迭代器,但还可以逐个向后移动迭代器。

随机访问迭代器(Random Access Iterator):提供了前向和后向移动迭代器的能力,还支持常数时间的随机访问。

算法

sort(b,e)
sort(b,e,回掉函数)
unique(b,e);     //使用该算法前,要先对元素进行排序
find_if(b,e,谓词);
count_if(b,e,谓词);
for_each(b,e,回掉函数);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值