C++STL标准模板库

本文详细介绍了C++的STL(标准模板库),包括序列式容器如vector、deque和list,以及关系式容器map。vector是一个动态大小数组,支持尾部快速插入和删除;deque允许在两端快速插入和删除,但中间操作较慢;list是双链表,适合频繁的插入和删除操作。map则是一种集合结构,基于二叉查找树,提供根据key快速查找元素的功能。此外,文章还讨论了迭代器的使用和各种操作的性能特点。
摘要由CSDN通过智能技术生成

目录

STL"标准模板库"

迭代器

一.vector

*deque双向队列

*list双链表

map 集合结构

STL"标准模板库"

c++的核心
STL容器:
序列式容器
元素固定位置,元素位置取决于插入的时机和地点,与值无关,vector,list,deque
关系式容器
取决于元素值的大小,set,multiset,map,multim
特性
1.外部数据外部管理,内部数据内部管理
2.多次遍历元素次序相同
3.各项操作并非绝对安全

迭代器

用来访问类中的所有元素,行为类似指针
访问特性:半开区间(左闭右开).
    
定义迭代器
    vector <int> ::interator vit;
删除迭代器会失效,可获取删除位置的下一个位置

一.vector

封装了动态大小数组的顺序容器,vector是一个能够存放任意类型的动态数组,也称为向量
使用:#include<vector>
//类名<类型>对象名
//半倍扩容
size/2    比1小 加一
          比一大 加一半
          
  尾删只是无法访问
  v.at 会判断越界
  
  自己扩容
  1.resize 会赋值
  2.reserve  不会赋值

二维数组

 1.int row , col;2.vector<vector<int>> vv;3.vv.reserve(row)//q4.for循环确定列

*deque双向队列

deque是双向开口的连续线性空间(动态的将多个连续空间通过指针数组联系在一起)

头尾均可快速插入和删除

中间比较慢

插入

	deque<int > dq;
	for (int i = 0; i < 6; ++i)
	{
		dq.push_back(i + 1);
		
	}
	for (int i = 0; i < 6; ++i)
	{
		dq.push_front(i*11 + 11);

	}

删除

dq.pop_front();
dq.pop_back();

迭代器定义 //出现内存重分配,迭代器会失效(顺序结构)

    deque<int >::iterator dit;

erase()函数删除pos位置上的元素,或者删除start和end之间的所有元素。返回值是一个iterator,指向被删除元素的后一个元素。

迭代器遍历deque

int i = 0;
	for (dit = dq.begin(); dit != dq.end(); dit++, ++i)
	{
		printf("dq[%i]=%i\n", i + 1, *dit);
	}

*list双链表

1.不支持随机存取

2.任何位置删除插入很快

3.插入删除不会导致指向其他元素的指针引用迭代器失效

list <int> L;
	for (int i = 0; i < 6; ++i)
	{
		L.push_back(i + 1);

	}
	for (int i = 0; i < 6; ++i)
	{
		L.push_front(i * 11 + 11);
	}

定义迭代器

list<int >::iterator  lit;    
lit = L.begin();    //list无法随机访问,只能迭代器++伪随机访问   
   for (int i = 0; i < 5; ++i)        
        lit++;

按数值删除

    L.remove(11);//没有就不删

list进阶应用

按条件删除

	L.remove_if(isBase);
//通过回调函数判断是否删除

去重函数 L.unique(); //两两判断删除

传入回调达成升序降序效果

map 集合结构

//二叉查找树 和c#的list类似

map的元素类型Key和T

1.Key 和value 必须满足可赋值和可复制的性质

2.key必须可比较

3.根据已知的key搜寻某个元素性能比已知value搜寻某个元素性能好

	map<int, double> m;
  //插入
	m[1] = 3.14;
	m[2] = 2.68;
	m[0] = 3.33;
	//删除
	//根据key值删除
	m.erase(1);
	//迭代器
	map<int, double>::iterator mit;
	//同样不支持随机访问
	for (mit = m.begin(); mit != m.end(); mit++)
		printf("key %i =%f\n", mit->first, mit->second);

元素的插入

	//元素的插入 
	m.insert(std::pair<int, double>(8, 123));//pair进行结构创建
	m.insert(map<int, double>::value_type(9, 444));//调用成员函数
	m.insert(std::make_pair(5, 2.333));//捏造一个结构
	//默认升序
	map<string, int, greater<string>> mm;//greater按照string为key进行降序
	map<string, int, less<int>> mmm;//less按照int为key进行升序

Multimap 允许可重复的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值