目录
一.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;
}