【c++】STL容器

参考资料

C++ STL标准库基础

C++STL【容器】详解 (全站最详细) - 知乎

一. STL介绍

STL六大组件:

容器(Containers),算法(Algorithms),迭代器(Iterators),仿函数(Functors),适配器(Adapters),分配器(Allocators)

二. 容器

2.1 vector

向量容器,擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1);而对于在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)。

  • 内存是连续的,可以 at 和 [] 取元素(最好使用at的方式,out of range会提示报错)
  • 迭代器可以++

2.1.1 头文件

#include <vector>

2.1.2 内部结构

2.1.3 用法

1. 构造
//默认构造,无参构造
vector<int> v1;

//预留内存
v1.reserve(100);  //此时不能用v1.at() v1[]来赋值

//预留内存
v1.resize(100);  //此时可以用v1.at() v1[]来赋值,默认是0
v1.resize(100, 1);  //默认赋值1

//默认构造,有参构造
std::vector<int> test = {1,2,5,8,3,5};

//push_back empalce_back构造
for (int i = 0; i < 10; ++i)
{
	v1.push_back(i);
}

//区间方式构造
vector<int> v2(v1.begin(), v1.end());

//n个element方式构造
vector<int> v3(10, 100);	//10个100

//拷贝构造
vector<int> v4(v3);	
2. 赋值
//直接赋值
vector<int> v2;
v2 = v1;

//assign赋值
vector<int> v3;
v3.assign(v1.begin(), v1.end());

//n个element赋值
vector<int> v4;
v4.assign(10, 100);

//初始化赋值
vector<int> v5 = {0,4,9};

//单个元素赋值
vector<int> v6;
v6.resize(10);
v6[0] = 10;
v6[1] = 60;
3. 插入删除
vector<int> v;
//尾插
v.push_back(10);
v.emplace_back(10);   // emplace_back比push_back赋值次数少

//尾删
v.pop_back();

//插入 - 提供迭代器
v.insert(v.begin(), 100);

//插入两个值为 100 的元素
v.insert(v.begin(), 2, 100);

//删除 - 提供迭代器
v.erase(v.begin());
v.erase(v.begin(), v.end());		//相当于清空操作
v.clear();		//清空容器中所有元素,这个时候capacity还在
v.shrink_to_fit();  //清空元素之后再清空capacity
4. 容量和大小
//是否为空
v.empty()  
//vector容器的容量为
v.capacity()
//vector容器的大小为
v.size()
//重新指定大小 - 变大
v.resize(15);
v.resize(15,10);
5.迭代器

v.begin() v.end() v.rbegin() v.rend()都是迭代器,由于内存时连续的,所以可以直接++操作

vector.begin() 返回一个指向向量起始位置的正向迭代器,可以通过 ++ 操作来依次访问后续元素。

vector.rbegin() 返回一个指向向量末尾位置的反向迭代器,同样可以通过 ++ 操作,但它会朝着向量的起始位置移动。

2.2 deque

内存是连续的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值