C++STL 容器详解

C++STL 容器详解,第1张

C++STL 容器详解

STL 容器是对象的集合。

容器可以分为以下四类
1、近容器
2、顺序容器
3、容器适配器
4、关联容器

容器类近容器int a[ ] ,string顺序容器vector/list/deque容器适配器stack/queue关联容器set/multiset/map/multimap

1、近容器:string
头文件#include

string s("sshdk");
string s1(s);//初始化(1)
string s2(s1.begin(),s1.end());//初始化(2)
s.popbuck();//插入
s.pushback();//d出
s[i]//可以用【】访问
s.insert();//给找到位置插  所在位置元素退后
s.back()='s';//给字符串最后一个位置替换字符 如果传入多个 则替换传入的最后一个字符
s.front()='ss';//给字符串第一个位置替换字符 如果传入多个 则替换传入的最后一个字符
s.empty();//测试字符串是否为空
s.erase();//删除  
s.find();
int sit = s.find("#");//找字符串的某个字符 找到返回0 负责返回-1;
s.clear();//清空字符串
s.copy();
s.copy(p, 4);//把字符串四个字符拷贝到p指针所在地址
s.swap();
s.swap(s1);//交换两字符串的内容
string::iterator it = s.begin();//string迭代器
typeid(s.c_str()).name() //打印所属类型

2、顺序容器

2.1、vector
vector头文件#include
vector容器与数组类似,包含一组地址连续的存储单元。对vector容器可以进行很多 *** 作,包括常见的查询、插入、删除等。

#include

vectorv;//定义存放整形数的vector容器v和v1;
vector v1;
v.capacity();  //容器容量
v.size();      //容器大小
v.max_size()   //返回int类型可以储存的最大值
v.at(int idx); //用法和[]运算符相同
v.push_back(); //尾部插入
v.pop_back();  //尾部删除
v.front();     //获取头部元素
v.back();      //获取尾部元素
v.begin();     //头元素的迭代器
v.end();       //尾部元素的迭代器
v.insert(pos,elem); //pos是vector的插入元素的位置
v.insert(pos, n, elem) //在位置pos上插入n个元素elem
v.insert(pos, begin, end);
v.erase(pos);   //移除pos位置上的元素,返回下一个数据的位置
v.erase(begin, end); //移除[begin, end)区间的数据,返回下一个元素的位置
v.reverse(pos1, pos2); //将vector中的pos1~pos2的元素逆序存储
vector::iterator it1 = v1.begin();//使用迭代器

vector构造函数使用方法有以下四种:

vector();//无参数构造
vector(size_type num,const TYPE&val);//参数个数num、参数值val
vector(const vector &from);//构造一个与from相同的vector
vector(input_iterator start,input_iterator end);//构造一个值取自迭代器vector,开始位置和结束位置

2.2、list
底层:双向链表

list L;//创建
L.push_front();头插
L.pop_front();//头删
L.resize(20);//扩容 不够用0 补
L.reverse();//逆转
L.size();//大小
L.max_size();//返回list可以最多容纳元素数量
L.empty();//判空  为空 放回true 否则返回false
//插入
L.push_back();
L,push_front();
L.insert();
L.insert(pos, n , elem);
L.insert(pos, begin, end);
//删除
L.pop_back();
L.pop_front();
L.erase(begin, end);
L.erase(elem);

构造函数与上vector类似

3、容器适配器
C++提供了三种容器适配器(container adapter):stack,queue和priority_queue。stack和queue基于deque实现,priority_queue基于vector实现。

3.1、stack

#include
stacks;//初始化
	for (int i = 0; i < 10; i++)
	{
		s.push(i + 1);//循环插入
	}
s.empty();  //判断stack是否为空,为空返回true,否则返回false
s.size();   //返回stack中元素的个数
s.pop();    //删除栈顶元素,但不返回其值
s.top();    //返回栈顶元素的值,但不删除此元素
s.push(item);   //在栈顶压入新元素item

3.2 、queue

#include

queue q;//初始化
	for (int i = 0; i < 10; i++)
	{
		q.push(i+1);//循环插入、对于priority_queue,在基于优先级的适当位置插入新元素
	}
q.empty();  //判断队列是否为空
q.size();   //返回队列长度
//queue only:
q.front();  //返回队首元素的值,但不删除该元素
q.back();   //返回队尾元素的值,但不删除该元素
//priority_queue only:
q.top();    //返回具有最高优先级的元素值,但不删除该元素

4、关联容器
4.1、set
集合 数据有序 底层红黑树 不允许重复
set里面每个元素只存有一个key,它支持高效的关键字查询 *** 作。set对应数学中的“集合”
直接代码加注释

#include
template 
void show_con(CON& con)
{
	typename CON::iterator it = con.begin();
	for (; it != con.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
int main()
{
    setp;//有序一维数组  自动排序 重复删除
	p.insert(56);//插入
	p.insert(45);
	p.insert(12);
	p.insert(99);
	p.insert(999);
	p.insert(54);
	p.insert(56);
	show_con(p);
	set::iterator it4 = p.begin();
	//p.find()查找
	set::iterator it = p.find(99);
	if (it != p.end())
	{
		cout << *it << endl;
	}
	p.swap(p);//交换容器
	p.empty();//判空
	p.size();//大小
	return 0;
	}

可重复multiset
多重集合 数据有序 底层红黑树 允许重复

//multiset
	multiset ms;//可重复set容器
	ms.insert(98);
	ms.insert(98);
	ms.insert(95);
	ms.insert(10);
	show_con(ms);
	multiset::iterator it5 = ms.find(95);
	if (it5 != ms.end())
	{
		for (int i = 0; i < ms.count(95); i++)
		{
			cout << *it5 << endl;
			it5++;
		}
	}
	else
	{
		cout << "dont find:" << endl;
	}

4.2、map

映射表 数据按key有序 红黑树 不允许重复
如果说set对应数学中的“集合”,那么map对应的就是“映射”。map是一种key-value型容器,其中key是关键字,起到索引作用,而value就是其对应的值。与set不同的是它支持下标访问。头文件是

//map m
//其中T1是key类型,T2是value类型,m就是一个T1-T2的key-value。
map mm;
mm.insert(make_pair(1, "aaaa"));
map::iterator it6 = mm.begin();
for (; it6 != mm.end(); it6++)
{
	cout << it6->first << "----->";
	cout << it6->second << endl;
}
mm.find();//返回指向key位置的迭代器.若无则返回m.end()
m.Count(key)//返回map中key出现的次数(0或1)
mm.insert();//插入
mm.erase(key)://删除键为key的元素
mm.erase(it)://删除迭代器it所指向的元素
mm.lower_bound(key)//返回指向第一个键值不小于key的元素的迭代器
mm.upper_bound(key)//返回指向第一个键值大于key的元素的迭代器
mm.clear()//清空mm容器

multimap
多充映射表 数据按照key有序 红黑树 允许重复

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5610333.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存