STL容器入门

目录

 

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;
    //在最前面插入新元素,元素值为8
    v.insert(v.begin(),8);

    //在第2个元素前插入新元素1
    v.insert(v.begin()+2,1);

    //在向量末尾追加新元素3
    v.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 3
    return 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;
        /*abcd100
          bcd100
          cd100
          d100
          100
          00
          0*/
    }

    /*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 数据int
    m["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双端队列容器 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值