C++STL的应用以及容器:vector list dqueu

STL(Standard Template Library):即标准模板库,是一个高效的C++程序库。

  1. 他包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性

  1. 从逻辑层次来看,在STL中体现了泛型化程序设计的思想
    1. 在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。
  1. 从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的
    1. 基于模板(template)

STL组件:

Container(容器) 各种基本数据结构

Adapter(适配器) 可改变containers或function object接口的一种组件

Algorithm(算法) 各种基本算法如sort、search…等

Iterator(迭代器)* 连接containers和algorithms

Function object(函数对象) *

Allocator(分配器)*

容器: 容器类是容纳、包含一组元素或元素集合的对象

1.异类容器类与同类容器类

2.顺序容器与关联容器

七种基本容器:

向量(vector)、双端队列(deque)、链表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)

  1. 标准容器的成员绝大部分都具有共同的名称

迭代器:

迭代器是面向对象版本的指针,它们提供了访问容器、序列中每个元素的方法

适配器:

适配器是一种接口类

为已有的类提供新的接口

目的是简化、约束、使之安全、隐藏或者改变被修改类提供的服务集合

顺序容器——向量(vector):-->动态数组

1--向量属于顺序容器,用于容纳不定长线性序列(即线性群体)提供对序 列的快速随机访问(也称直接访问)

2--向量很像一个数组,所以与其他容器相比,vector 能非常方便和高效 访问单个元素,支持随机访问迭代子

3--向量是动态结构,它的大小不固定,可以在程序运行时增加或减少

4--向量类的优点:与数组不同,向量的内存用尽时,向量自动分配更大的连 续内存区,将原先的元素复制到新的内存区,并释放旧的内存区

头文件:#include <vector>

5--使用场景:访问频繁,不频繁

基本操作1

(1)头文件

#include<vector>.

(2)创建vector对象,

vector<int> vec;

(3)尾部插入数字:

vec.push_back(a);

(4)使用下标访问元素

cout<<vec[0]<<endl;记住下标是从0开始的。

(5)使用迭代器访问元素.

  vector<int>::iterator it;

  for(it=vec.begin();it!=vec.end();it++)

     cout<<*it<<endl;

(6)插入元素:    

vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

(7)删除元素:    

vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:

vec.size();

vec.resize;改变大小

(9)清空:

vec.clear();

顺序容器——双端队列 (deque):

双端队列是一种放松了访问权限的队列。元素可以从队列的两端入队和出队,也支持通过下标操作符“[]”进行直接访问 先进先出

与向量的对比:

功能上:和向量没有多少区别,

性能上:在双端队列起点上的插入和删除操作快

头文件:#include <deque>

顺序容器——列表 (list):

链表主要用于存放双向链表,可以从任意一端开始遍历。链表还提供了拼接(splice)操作,将一个序列中的元素从插入到另一个序列中

对比:

元素的插入和删除操作对 list 而言尤为高效

与 vector 和 deque 相比,对元素的下标访问操作的低效是不能容忍的,因此 list 不提供这类操作

头文件:#include <list>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值