STL2-其他容器

目录

一.stack容器:

1.stack容器的基本概念:

2.stack容器的常用接口:

二·.queue容器:

1.queue容器的基本概念:

三.list容器

1.基本概念:

2.list构造函数:

3.list赋值与交换:

4.list大小操作:

5.list插入和删除:

6.list数据存储:

7.list反转和排序:

四.set/multiset容器:

1.set容器:

2.set构造和赋值:

3.set大小和交换操作:

4.set插入和删除:

5.set查找和统计:

6.pair对组组建:

7.set容器排序:

8.set存放自定义数据类型

五.map/multimap容器:

1.map基本概念:

(1)本质:

(2)优点:

(3)map和multimap区别:

2.map构造和赋值:

3.map大小和交换操作:

4.map插入和删除:

5.map查找和统计:

6.map排序:


一.stack容器:

1.stack容器的基本概念:

stack是一种先进后出的数据结构,它只有一个出口。栈中只有顶端的元素才可以被外界利用,因此栈不允许有遍历行为。

2.stack容器的常用接口:

二·.queue容器:

1.queue容器的基本概念:

queue是一种先进先出的容器,它有两个出口。队列容器允许从一端新增元素,从一端移除元素。队列中只有对头和队尾才可以被外界使用,因此队列不允许有遍历行为。队列进数据被称为入队。从队尾入队,从队头出队。

三.list容器

1.基本概念:

STL中的链表是一个双向循环链表,最后一个节点指向第一个节点的位置,第一个节点钱一个位置指向最后一个节点。

优点:可以对任意位置进行快速插入或删除元素,采用动态存储分配,不会造成内存浪费和溢出。

缺点:对于容器的遍历速度,没有数组快,占用的空间比数组大。

链表list中的迭代器只支持前移和后移,属于双向迭代器。

2.list构造函数:

3.list赋值与交换:

4.list大小操作:

5.list插入和删除:

6.list数据存储:

注意:(1)不可以用[]访问list容器中的数据

           (2)不可以用at方式访问list容器中的元素

list本质是一个链表,不是用连续线性存储空间存储数据。

7.list反转和排序:

list链表不支持随机访问迭代器的容器,不可以用标准算法。

四.set/multiset容器:

1.set容器:

简介:所有元素在插入时都会被自动排序

本质:set/multiset属于关联式容器,底层结构是用二叉树实现。

set和multiset区别:

set不允许容器中有重复的元素

multiset允许容器中有重复的元素

2.set构造和赋值:

3.set大小和交换操作:

4.set插入和删除:

5.set查找和统计:

6.pair对组组建:

7.set容器排序:
#include<iostream>
using namespace std;
#include<set>
//利用仿函数重写排序规则
class mycompare {
public:
	bool operator()(int v1, int v2)const {
		return v1 > v2;
	}
};
void edg01() {
	set<int,mycompare>s2;
	s2.insert(3);
	s2.insert(4);
	s2.insert(2);
	s2.insert(5);
	s2.insert(1);
	for (set<int, mycompare>::iterator it = s2.begin(); it != s2.end(); it++) {
		cout << *it << " ";
}
	cout << endl;
}
int main() {
	edg01();
	return 0;
}
8.set存放自定义数据类型
#include<iostream>
using namespace std;
#include<set>
#include<string>
class person {
public:
	person(string name, int age)
	{
		this->M_name = name;
		this->M_age = age;
	}
	string M_name;
	int M_age;
};
class Mycompare{
public:
	bool operator()(const person&a,const person &b )const {
		return a.M_age > b.M_age;
	}
};
void edg02() {
	//自定义数据类型都会指定排序规则
	set<person,Mycompare>s1;
	//创建person对象
	person p1("刘备", 24);
	person p2("关羽", 25);
	person p3("张飞", 27);
	person p4("马超", 26);
	person p5("赵云", 29);
	person p6("黄忠", 21);
	s1.insert(p1);
	s1.insert(p2);
	s1.insert(p3);
	s1.insert(p4);
	s1.insert(p5);
	s1.insert(p6);
	for (set<person,Mycompare>::iterator it = s1.begin(); it != s1.end(); it++)
	{
		cout << "姓名:" << (*it).M_name << "年龄:" << (*it).M_age << " ";
		cout << endl;
	}
}
int main() {
	edg01();
	edg02();





	return 0;
}

五.map/multimap容器:

1.map基本概念:
  • map中所有元素都是pair
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)。
  • 所有元素都会根据元素的键值自动排序
(1)本质:

map/multimap属于关联式容器,底层结构是用二叉树实现。

(2)优点:

可以根据key快速找到value值

(3)map和multimap区别:
  • map不允许容器中有重复key元素
  • multimap允许容器中有重复key值元素
2.map构造和赋值:

3.map大小和交换操作:

4.map插入和删除:

5.map查找和统计:

6.map排序:
#include<iostream>
using namespace std;
#include<map>
class mycompare {
public:
	bool operator()(int v1, int v2)const {
		return v1 > v2;
	}
};
void ig01() {
	map<int,int,mycompare>m1;
	m1.insert(pair<int, int>(1, 10));
	m1.insert(pair<int, int>(2, 20));
	m1.insert(pair<int, int>(3, 30));
	m1.insert(pair<int, int>(4, 40));
	m1.insert(pair<int, int>(5, 50));
	for (map<int,int,mycompare>::iterator it = m1.begin(); it != m1.end(); it++) {
		cout << "key=" << (*it).first << " " << "value=" << (*it).second << " ";
		cout << endl;
	}
	cout << endl;

}
int main() {
	ig01();
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值