当前位置: 代码迷 >> 综合 >> STL容器入门
  详细解决方案

STL容器入门

热度:11   发布时间:2023-11-02 23:49:00.0

目录

 

1.vector(向量)

2.string 点击这里,获得更多内容(string类)

3.set点击打开链接,查看更多set用法(集合)

4.map(映射)

5.栈

6.队列和优先队列

C++ 清空队列(queue)的几种方法

方法一

方法二

方法三

7.deque双端队列容器 


1.vector(向量)

#include<iostream>
#include<algorithm>
#include<numeric>  accumulate的头文件
#include<vector>//向量
using namespace std;
bool cmp(int a,int b)
{return a>b;
}
int main()
{///3种定义方式vector<int > a;//定义一个向量//vector<int > a(100);//定义了一个长度为100的向量//vector<int > a(100,90);//定义了一个长度为100且每个数据都是90的向量for(int i=1;i<10;i++)a.push_back(i);vector<int > ::iterator it;//定义迭代器,类似于指针sort(a.begin(),a.end(),cmp);for(it=a.begin();it!=a.end();it++) //用迭代器访问vector元素cout<<*it<<" ";cout<<endl;/*for(int i=0;i<10;i++) //下标访问vector元素cout<<a[i]<<" ";*///accumulate算法的第一个用法:求和cout<<accumulate(a.begin(),a.end(),0)<<endl;//accumulate算法的第二个用法:计算连乘积cout<<accumulate(a.begin(),a.end(),1,multiplies<int>( ))<<endl;cout<<endl;return 0;
}

 元素的插入

#include<iostream>
#include<vector>
using namespace std;int main(){vector<int> v(3);v[0]=2;v[1]=7;v[2]=9;//在最前面插入新元素,元素值为8v.insert(v.begin(),8);//在第2个元素前插入新元素1v.insert(v.begin()+2,1);//在向量末尾追加新元素3v.insert(v.end(),3);vector<int>::iterator it;for(it=v.begin();it!=v.end();it++)cout<<*it<<" ";cout<<endl;//输出结果:8 2 1 7 9 3return 0;
}

元素的删除:

erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。

clear()方法则一次性删除vector中的所有元素。

#include<iostream>
#include<vector>
using namespace std;int main(){vector<int> v(10);for(int i=0;i<10;i++)v[i]=i;//删除第二个元素,从0开始计数//v.erase(v.begin()+2);  //2被删除了vector<int>::iterator it;for(it=v.begin();it!=v.end();it++)cout<<*it<<" ";cout<<endl;//删除迭代器第1到第5区间的所有元素v.erase(v.begin()+1,v.begin()+5);  //删除了下标[1,5)的元素,左闭右开for(it=v.begin();it!=v.end();it++)cout<<*it<<" ";cout<<endl;//清空向量v.clear();//输出向量的大小cout<<v.size()<<endl;return 0;
}

 使用reverse反向排列算法

#include<iostream>
#include<vector>
#include<algorithm>  //reverse的头文件
using namespace std;int main(){vector<int> v(10);for(int i=0;i<10;i++)v[i]=i;vector<int>::iterator it;for(it=v.begin();it!=v.end();it++)cout<<*it<<" ";cout<<endl;//反向排列向量从首到尾间的元素reverse(v.begin(),v.end());for(it=v.begin();it!=v.end();it++)cout<<*it<<" ";cout<<endl;//清空向量v.clear();//输出向量的大小cout<<v.size()<<endl;return 0;
}

2.string 点击这里,获得更多内容(string类)

#include<iostream>
#include<vector>
#include<string>//string类
using namespace std;int main()
{string str[7];str[0]="abcd100";cout<<str[0]<<endl;for(int i=1;i<7;i++){str[i]=str[0].substr(i);cout<<str[i]<<endl;/*abcd100bcd100cd100d100100000*/}/*string str="abcd";vector<string >num;for(int i=0;i<3;i++){cin>>str;num.push_back(str);}for(int i=0;i<3;i++){cout<<num[i][2]<<endl;}*//*cout<<str.find('b');//1  查找 返回'b'在字符串中的下标cout<<str.find("bc");//1  查找 返回'b'在字符串中的下标*//*str="";//清空操作cout<<str<<endl;*//*str+="66666";//字符串连接cout<<str<<endl;str="333333";//字符串赋值cout<<str<<endl;*////插入删除/*str="gkcksles";string::iterator it;//任何一个容器都是有迭代器的it=str.begin();str.insert(it+2,'0');//在下标2之前插入一个字符'0'str.erase(it+1);//删除下标为1的字符,如果大量的删除,可循环删除cout<<str<<endl;*/return 0;
}

3.set点击打开链接,查看更多set用法(集合)

#include<set>//集合
#include<iostream>
using namespace std;
int main()
{set<int >s;for(int i=10;i>0;i--){s.insert(i);//s.erase(i);//删除s.insert(i);}/*set<int >::iterator it;//前向迭代器for(it=s.begin();it!=s.end();it++)cout<<*it<<" ";cout<<endl;//这部分说明了集合的两个功能:1.除重;2.将集合中的元素按照从小到大的顺序自动排好*/set<int >::reverse_iterator it;//后向迭代器for(it=s.rbegin();it!=s.rend();it++)cout<<*it<<" ";cout<<endl;return 0;
}

4.map(映射)

//映射
#include<map>
using namespace std;
int main()
{//map中第一元素是按字典序排列的map<string,int>m;//名为映射的数组 下标为string 数据intm["red"]=1;m["green"]=2;return 0;
}

5.栈

//栈,后进先出
#include<stack>
using namespace std;
int main()
{stack<int> st;for(int i=0;i<10;i++){st.push(i);}cout<<"size??"<<endl;cout<<st.size()<<endl;cout<<"isempty??"<<endl;cout<<st.empty()<<endl;for(int i=0;i<10;i++){cout<<st.top()<<endl;st.pop();}cout<<"isempty??"<<endl;cout<<st.empty()<<endl;return 0;
}

6.队列和优先队列

C++ 清空队列(queue)的几种方法

C++中的queue自身是不支持clear操作的,但是双端队列deque是支持clear操作的。

方法一

直接用空的队列对象赋值

queue<int> q1;
// process
// ...
q1 = queue<int>();

方法二

遍历出队列

while (!Q.empty()) Q.pop();

方法三

使用swap,这种是最高效的,定义clear,保持STL容器的标准。

void clear(queue<int>& q) {queue<int> empty;swap(empty, q);
}
//队列,先进先出
#include<queue>
#include<iostream>
//#include<stack>
using namespace std;
int main()
{//priority_queue<int> st;  //优先队列默认情况下,从大到小排序,,//优先队列和栈一样,都是.top(),堆是.front()queue<int> st;for(int i=0;i<10;i++){st.push(i);}cout<<"size??"<<endl;cout<<st.size()<<endl;cout<<"isempty??"<<endl;cout<<st.empty()<<endl;for(int i=0;i<10;i++){cout<<st.front()<<endl;//cout<<st.top()<<endl;st.pop();}cout<<"isempty??"<<endl;cout<<st.empty()<<endl;return 0;
}

7.deque双端队列容器 

  相关解决方案