Y1 - 1 常见STL讲解

STL

概念

STL(Standard TemplateLibrary),即标准模板库,从根本上说,STL是一些“容器”的集合,这些“容器”有list、vector、set、map等,STL也是算法和其他一些组件的集合。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。

STL包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。

常用STL

vector(向量),stack(栈),queue(队列),map(映射),set(集合)等等。

本节课简介

迭代器、

迭代器(iterator)功能:访问容器对象的元素。

所有标准库容器都可以使用迭代器,其中只有少数几种(vector)才同时支持下标运算符。

string对象不属于容器类型,但是string支持很多与容器类型类似的操作。

迭代器分为有效无效,这点与指针差不多。

  • 有效的迭代器:指向某个元素,或者指向容器中尾元素的下一个位置;
  • 无效的迭代器:除上述的其他所有情况。

使用样例(以vector为例)

// 一维vector
vector<int> v;
// ...赋值
vector<int>::iterator it; // 迭代器类型应与容器类型一致
for (it = v.begin(); it != v.end(); it++)
{
    cout << *it << ' ';
}

// 二维vector
vector<vector<int>> v;
// ...赋值
vector<vector<int>>::iterator it;
for (it = v.begin(); it != v.end(); it++)
{
    vector<int>::iterator itt = (*it).begin(); // 逐层分解使用迭代器
    for (; itt != (*it).end(); itt++)
    {
        cout << *itt << ' ';
    }
    cout << endl;
}

 

map(映射)

1.map

map(映射)是STL的一个关联容器,底层是由红黑树实现的,每个操作的复杂度是O(logn)。

map会自动对数据进行排序。

使用时需加上头文件

#include <map>

 使用方法如下

// 映射
map<int, int> m; // 定义
m[x] = y;        // 赋值
m.find(x);       // 查找x是否存在
m.count(x);      // 查找键为x的数量 查找x是否存在
m.empty();       // 判断是否为空
m.size();        // 容器内元素数量
m.insert(x);     // 插入 x必须为对的形式 可以为pari的形式 通过make_pari创建
m.erase(x);      // 将键值为x的元素删除
2.unordered_map(无序映射)

unordered_map(无序映射)是STL的一个关联容器,用于存储由键值和映射值组合而成的元素,底层是由哈希实现的,每个操作的复杂度趋近O(1)。

顾名思义,unordered_map不会对数据进行排序。

使用时需加上头文件

#include <unordered_map>

使用方法与map类似

// 映射
unordered_map<int, int> m; // 定义
m[x] = y;                  // 赋值
m.find(x);                 // 查找x是否存在
m.count(x);                // 查找键为x的数量 查找x是否存在
m.empty();                 // 判断是否为空
m.size();                  // 容器内元素数量
m.insert(x);               // 插入 x必须为对的形式 可以为pari的形式 通过make_pari创建
m.erase(x);                // 将键值为x的元素删除

3. multimap

 multimap是关联式容器,它按特定的次序(按照key来比较)存储由键和值组合而成的元素,多个键值对之间的值可以重复,底层是由红黑树实现的。

multimap和map的唯一区别是multimap中的key可以重复,而map的key是唯一的。

使用时需加上头文件

#include <map>

set(集合) 

...敬请期待

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值