初识STL

初识STL

标准模板库

  • 广义:容器(container)、算法(algorithm)和迭代器(iterator)
  • 容器和算法之间通过迭代器进行无缝衔接
  • STL中几乎所有代码都采用模板类或模板函数

STL六大组件

  1. 容器
  2. 算法
  3. 迭代器
  4. 仿函数
  5. 适配器:一种用来修饰容器或仿函数或迭代器接口的东西
  6. 空间配置器:负责空间配置管理

容器

序列式容器:顺序存储,随机存取 如:vector,deque,list

关联式容器:随机存储,顺序存取 如:map


vector

可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素很慢,因为除了在尾部之外任意一次删除或插入都需要移动一些元素,添加元素还可能需要分配空间,从而移动所有元素到另一块空间

#include <vector>
#include <iostream>
#include <iterator>//迭代器头文件
#include <algoritm>//算法头文件
using namespace std;
void myPrint(int val)
{
	cout << val << " ";
}
int main()
{
    vector<int>v_int;
    v_int.push_back(10);//尾部插入10
    v_int.push_back(12);
    v_int.pop();//删除尾部元素
    v_int.push_back(11)
    
    for(auto it = v_int.begin(); it != v_int.end(); it++)
        cout<<*it<<" ";
    cout<<endl;//输出结果是10 11
    //利用算法遍历方式
    for_each(v_int.begin(),v_int.end(),myPrint);
    return 0;
}
  • vector数据结和数组非常类似,也称单端数组

  • vector区别于普通数组之处在于其可以动态地扩展空间

  • 动态扩展空间并不是在原有基础上续接新空间,而是找更大的空间,然后将原来空间中的内容迁移到新空间,再释放原来的空间

  • vector的迭代器是支持随机访问的迭代器


互换容器
#include <vector>
#include <iostream>
using namespace std;
int main()
{
    vector<int>v{1,2,3,4};
    vector<int>u{5,6,7,8,9};
    vector<int>(u).swap(v);//互换两个容器中的元素
    //另外此处vector<int>(u)是一个拷贝v的匿名对象,当前行结束后马上就回收
    for(int val:v)
        cout<<val<<" ";
    cout<<endl;
    return 0;
}


deque

双端队列,其内部工作原理:

  • deque内部有个中控器 ,维护每段缓冲区的内容,缓冲区中存放着真实的数据。
  • 中控器维护的是每个缓冲区的地址,使得使用deque时像一段连续的空间

在这里插入图片描述


算法

质变算法:如:拷贝、删除

非质变算法:如:遍历

算法要通过迭代器才能访问容器,作用和指针类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值