关于c++常用的STL基础功能介绍:vector,queue,stack,map,set(一些用法借用计蒜客培训,望大佬莫喷)
1、set:集合,具有自动删除与排序功能
#include
#include
#include
using namespace std;
int main()
{
set country;//创建一个set的集合
country.insert("China");//插入
country.insert("America");
country.insert("France");
set::iterator it;//通过迭代器器对set集合里的元素进行操作
for(it=country.begin();it!=country.end();it++){
cout<<*it<<" ";
}
cout<
(2)用set实现集合的交并差对称差(引用别人的方法)
#include
#include
#include
using namespace std;
int main()
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
set S( a, a + 9 );
int b[] = { 3, 6, 8, 9 };
set S2( b, b + 4 );
set::iterator site;
set Su;
set Si;
set Sd;
set Ssd;
//交集
set_intersection( S.begin(), S.end(),S2.begin(), S2.end(),inserter( Si, Si.begin() ) );
//并集
set_union( S.begin(), S.end(),S2.begin(), S2.end(),inserter( Su, Su.begin() ) );
//差集
set_difference( S.begin(), S.end(),S2.begin(), S2.end(),inserter( Sd, Sd.begin() ) );
//对称差集
set_symmetric_difference( S.begin(), S.end(),S2.begin(), S2.end(),inserter( Ssd, Ssd.begin() ) );
site = Si.begin();
cout<<"the intersection of S and S2 is : ";
while( site != Si.end() )
{
cout<< *site <<" ";
++ site;
}
cout<
2、map(类似于hash表),其实我理解就是一种逻辑关系
#include
#include
#include
3、vector动态数组很方便
(1)基础操作:(一维)
#include
#include
using namespace std;
int main()
{
vector v;
for(int i=1;i<=10;i++){
v.push_back(i*i);
}
for(int i=0;i
(2)二位vector的动态数组
#include
#include
#include
using namespace std;
int main()
{
int n=5;
vector >vec2;
for(int i=0;i x(i+1,1);
vec2.push_back(x);
}
for(int i=0;i
输出结果类似于杨辉三角
4、Stack(栈):后进先出
(1)手动实现一个基础的栈
#include
using namespace std;
struct Stack{
int data[10000];
int top=-1;
void push(int x){
top++;
if(top<10000){
data[top]=x;
}else{
top--;
cout<<"stack overflow"<=0){
top--;
}
}
int topval(){
if(top>=0){
return data[top];
}
}
};
int main()
{
Stack s;
for(int i=1;i<=10;i++){
s.push(i);
}
for(int i=1;i<=10;i++){
cout<
(2)用栈来解决汉诺塔问题
#include
#include
using namespace std;
stack S[3];
void move(int x,int y){
int temp=S[x].top();
S[x].pop();
S[y].push(temp);
cout<"<>n;
for(int i=n;i>=1;i--){
S[0].push(i);
}
hanoi(0,1,2,n);
while(!S[2].empty()){
cout<
5、队列queue:先进先出,对于广度优先搜索很有帮助
(1)基础用法
#include
#include
using namespace std;
int main()
{
queue q;
q.push(1);
q.push(2);
q.push(3);
while(!q.empty()){
cout<
(2)实现莫比乌斯环
#include
#include
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
queueq;
for(int i=1;i<=n;i++){
q.push(i);
}
int cur=1;
while(q.size()>1){
int x=q.front();
q.pop();
if(cur==m){
cur=1;
}else{
q.push(x);
cur++;
}
}
cout<