一、STL简介
从根本上说,STL ( Standard Template Library,标准模板库)是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。STL的目的是标准化组件,在C++标准中,STL被组织为下面的17个头文件:<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<number>、<queue>、<set>、<unordered_set>、<stack>和<utility>。
STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。
二、常用容器及其用法介绍
1、deque双端队列
deuqe是 一种具有队列和栈的性质的数据结构,看起来比较灵活,但是实际使用却不如栈和队列。
动态数组deque既可以在数组的开头和结尾插入和删除数据,其余操作与vector相似
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int main()
{
deque<int> a;
a.push_back(3);//从后面加入数据
a.push_back(4);
a.push_back(5);
a.push_front(2);//从前面加入数据
a.push_front(1);
a.push_front(0);
for(int i=0;i<a.size();i++)
{
cout<<"第"<<i<<"个元素为"<<a[i]<<endl;
}
a.pop_front();//pop最前的数据
a.pop_back();//pop最后面的一个数据
cout<<"第二次遍历"<<endl;
for(int i=0;i<a.size();i++)
{
cout<<"第"<<i<<"个元素为"<<a[i]<<endl;
}
deque<int>::iterator i;//定义一个迭代器
for(i=a.begin();i<a.end();i++)//使用迭代器进行遍历
{
//使用distance来计算此位置和开始位置的距离来计算下标
//distance在algorithm头文件中
size_t nOffset=distance(a.begin(),i);
cout<<nOffset<<"下标:"<<*i<<endl;
}
}
2、priority_queue优先级队列
如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构。默认情况下是最大值优先
//优先级队列
#include<iostream>
#include<queue>
#include<deque>
using namespace std;
int main()
{
priority_queue<int> pq;//优先级队列,默认用vector,默认最大值优先级队列
priority_queue<int,deque<int> > pq2;
priority_queue<int,vector<int>,std::greater<int> > pq3;
pq.push(10);
pq.push(15);
pq.push(5);
pq.push(25);
cout<<pq.size()<<endl;
cout<<pq.top()<<endl;
while(!pq.empty())
{
cout<<pq.top()<<" ";
pq.pop();
}
cout<<endl;
cout<<"最小级优先级队列"<<endl;
pq3.push(10);
pq3.push(15);
pq3.push(5);
pq3.push(25);
cout<<"大小"<<pq3.size()<<endl;
cout<<"top"<<pq3.top()<<endl;
while(!pq3.empty())
{
cout<<pq3.top()<<" ";
pq3.pop();
}
cout<<endl;
return 0;
}
3、bitset
bitset除了可以访问指定下标的bit位以外,还可以把它们作为一个整数来进行某些统计

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



