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();//弹出
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
vector<int>v;//定义存放整形数的vector容器v和v1;
vector<int> 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<int>::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<int> 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
stack<int>s;//初始化
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<int> 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 <typename CON>
void show_con(CON& con)
{
typename CON::iterator it = con.begin();
for (; it != con.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
set<int>p;//有序一维数组 自动排序 重复删除
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<int>::iterator it4 = p.begin();
//p.find()查找
set<int>::iterator it = p.find(99);
if (it != p.end())
{
cout << *it << endl;
}
p.swap(p);//交换容器
p.empty();//判空
p.size();//大小
return 0;
}
可重复multiset
多重集合 数据有序 底层红黑树 允许重复
//multiset
multiset<int> ms;//可重复set容器
ms.insert(98);
ms.insert(98);
ms.insert(95);
ms.insert(10);
show_con(ms);
multiset<int>::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<int, string> mm;
mm.insert(make_pair(1, "aaaa"));
map<int, string>::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有序 红黑树 允许重复