STL1:简介

本文介绍了STL(标准模板库)的基础知识,包括其与C++标准库的关系,版本信息。接着深入探讨了STL的组成部分,如容器、迭代器的分类和作用,适配器和算法的分类,以及函数对象和分配器的功能。通过这些内容,读者可以全面理解STL在C++编程中的重要角色。
摘要由CSDN通过智能技术生成

1、背景

1.1 STL是什么?

STL(Standard Template Library)标准模板库的英文缩写,包含有计算机科学领域常用的基本数据结构和基本算法。

1.2 STL与C++标准库的关系

在这里插入图片描述

1.3 版本

在这里插入图片描述

2、STL的组成

在这里插入图片描述

No.Component部件作用
1Container容器存储数据
2lterator迭代器遍历容器数据
3Adaper适配器(配接器)容器转换
4Algorithm算法通用算法
5Function Object/Functor函数对象/仿函数
6Allocator分配器(配置器)分配释放内存

程序 = 数据结构(容器) + 算法
迭代器是容器与算法的桥梁

3、容器分类

分类原则:结构

No.Container容器e.g.
1Sequence Container顺序容器(序列容器)vector,list,deque
2Associative Container关联容器map,``multimap,set,multiset`
3Container Adapter容器适配器stack,queue,priority_queue

4、迭代器分类

4.1 分类原则:访问方式

No.lterator迭代器能力e.g.
1Input Iterator输入迭代器向前读取能力istream_iterator
2Output Iterator输出迭代器向前写入能力ostream_iterator
3Forward Iterator向前迭代器向前读取写入能力-
4Biredirectional Iterator双向迭代器双向读取写入能力list,map,set的iterator
5Random-Access Iterator随机访问迭代器随机读取写入能力string,vector,deque的iterator

4.2 分类原则:操作类型

No.lterator迭代器e.g.
1iostream Iteractoriostream迭代器istream_iteractor,ostream_iteractor
2Insert Iteractor插入迭代器back_inserter,front_inserter,inserter
3Reverse Iteractor反向迭代器reverse_iteractor

4.3 测试

#include <iostream>
#include <vector>

using namespace std;

int main(){
    vector<int> vec;
    int n;
    while(cin>>n){
        vec.push_back(n);
    }

    for(int i=0;i<vec.size();i++){
        cout << vec[i] << endl;
    }
    //指针遍历数组
    int arr[] = {1,2,3,4,5,6};
    int *p = arr;
    while(p!=arr+6){
        cout << *p << " ";
	++p;
    }
    cout << endl;
    
    //迭代器遍历数组
    int *q = begin(arr);
    while(q!=end(arr)){
        cout << *q << " ";
	++q;
    }
    cout << endl;


    //迭代器
    vector<int>::iterator it=vec.begin();
    while(it != vec.end()){
        cout << *it << " ";
	++it;
    }
    cout << endl;

    //const 迭代器
    const vector<int> cvec = vec;
    vector<int>::const_iterator cit = cvec.cbegin();
    while(cit!=cvec.cend()){
        cout << *cit << " ";
	++cit;
    }
    cout << endl;

    //C++11  begin() end()
    vector<int>::iterator it2 = begin(vec);
    while(it2 != end(vec)){
        cout << *it2 << " ";
	++it2;
    }
    cout << endl;

    //C++11  base--scope--for
    for(int n:arr){
        cout << n << " ";
    }
    cout << endl;

    for(int n:vec){
        cout << n << " ";
    }
    cout << endl;
}

5、适配器分类

分类原则:适配部件

No.Adapter适配器e.g.
1Container Adapter容器适配器stack,queue,priority_queue
2Iterator Adapter迭代适配器back_inserter,front_inserter,inserter
3Function-Object Adapter函数对象适配器bind1st,bind2nd,not1,not2

6、算法分类

分类原则:按操作类型

No.Algorithm算法e.g.
1Read Only只读算法find,count,search,for_each,mismatch,equal,binary_search
2Write Only只写算法fill,generate,copy,transform,merge,swap,replace
3Sort排序算法sort,stable_sort,reverse

7、函数对象分类

分类原则:运算类型

No.Algorithm算法e.g.
1Arithmetic Function-Object算术函数对象plus,minus,multiplies,divides,modulus,negate
2Relational Function-Object关系函数对象equal_to,not_equal_to,less,less_equal,greater,greater_equal
3Logical Function-Object逻辑函数对象logical_and,logical_or,logical_not

8、分配器

功能:获取释放内存

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值