C++ STL 使用

vector

#include<bits/stdc++.h>


/*

将元素置于一个动态数组中加以管理,
可以随机存取元素(用索引直接存取),
数组尾部添加或移除元素非常快速。
但是在中部或头部安插元素比较费时,
方便尾部读取数据

*/
using namespace std;
const int N=10;

void Print(vector<int> vec)
{
    for(int i=0;i<vec.size();i++)
    {

        cout<<vec[i]<<" ";
    }


}
void Print1(vector<int> vec)
{
    //迭代器用法

    for(vector<int>::iterator it=vec.begin();it!=vec.end();it++)
    {

        cout<<*it<<" ";
    }
}
int main()
{
    vector<int> vec;//声明一个vector
    for(int i=0;i<N;i++)
    {
        vec.push_back(i);//入栈

    }
    Print(vec);
    cout<<endl;
    Print1(vec);
    vec.pop_back();//退栈
    vec.pop_back();
    cout<<endl;
    Print(vec);
    vec[5]=100;//赋值
    cout<<endl;
    Print(vec);
    vec.clear();//清除
    cout<<endl;
    cout<<vec.size();



    return 0;
}

stack

#include<bits/stdc++.h>
using namespace std;

stack<int> st;


/*
stack,栈的一些操作!

*/

int main()
{

    st.push(1);//入栈
    st.push(2);

    cout<<st.top();//取栈尾元素
    st.pop();//出栈
    cout<<" "<<st.top();
    cout<<endl<<st.size();

    return 0;
}

set

#include<bits/stdc++.h>
using namespace std;
const int N=10;
set<int>st;


/*
集合中不会存在重复元素,支持高效的插入、删除和查询操作,复杂度均是O(logn)
(对比使用数组来实现,虽然插入的时间复杂度O(1),但是删除和查询的时间复杂度却是O(n))。

*/
typedef struct book
{

    double price;
    string name;
}book;
struct Rule
{

    bool operator()(const book&b1,const book&b2)
    {
        return b1.price>b2.price;
    }
};
void Print(set<int> st)
{

    for(set<int>::iterator it=st.begin();it!=st.end();it++)
    {
        cout<<*it<<" ";
    }
};

struct Rule1
{
    bool operator()(const int&a,const int&b)
    {

        return  a>b;
    }

};
int main()
{
    for(int i=0;i<N;i++)
        st.insert(i);//高效插入元素

    st.erase(1);//删除元素

    set<int>::iterator it=st.find(2);//查找元素,返回值是迭代器
    cout<<*it<<endl;
    cout<<st.empty()<<endl;
    Print(st);
    cout<<endl;
    //自定义排序
    set<int,Rule1>st2;
    for(int i=0;i<N;i++)
        st2.insert(i);
    for(set<int,Rule1>::iterator it=st2.begin();it!=st2.end();it++)
        cout<<*it<<" ";

    return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=10;


struct Rule
{
    bool operator()(const int &a,const int &b)
    {
        return a>b;
    }

};
void Print(set<int,Rule>st)
{
    for(set<int>::iterator it=st.begin();it!=st.end();it++)
        cout<<*it<<" ";

}
int main()
{
    set<int,Rule>st;

    for(int i=0;i<N;i++)
        st.insert(i);
    Print(st);


    return 0;
}

 map

#include<bits/stdc++.h>
using namespace std;


int main()
{
    map<int,string> mapStudent;

    mapStudent.insert(pair<int,string>(0,"student_zero"));//插入数据
    mapStudent[1]="student_first";
    mapStudent.insert(map<int,string>::value_type(2,"student_second"));

    map<int,string>::iterator it=mapStudent.find(1);
    cout<<it->first<<" "<<it->second<<endl;
    cout<<"遍历开始"<<endl;

    mapStudent.erase(1);
    for(map<int,string>::iterator it=mapStudent.begin();it!=mapStudent.end();it++)
        cout<<it->first<<" "<<it->second<<endl;

    return 0;
}

 queue

#include<bits/stdc++.h>
using namespace std;
const int N=10;
/*
FIFO
*/
queue<int>que;
int main()
{

    for(int i=0;i<N;i++)
    {

        que.push(i);
    }
    cout<<que.empty()<<" ";//判断是否为空
    cout<<que.back()<<" ";//访问队尾元素
    cout<<endl<<que.size()<<" ";
    while(que.size())
    {

        cout<<que.front()<<" ";//取队首元素
        que.pop();//队首出队
    }

    return 0;
}

priority_queue

#include<bits/stdc++.h>
using namespace std;
//实质就是二叉堆,使用该模版可以快速实现小根堆、大根堆。插入、删除、查询的时间复杂度均是O(logn)。
//定义:priority_queue<Type, Container, Functional>
/*Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,
但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式。

当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。*/
struct Rule
{
    bool operator()(const int &a,const int &b)
    {
        return a>b;//最小堆
    }

};


int main()
{

    priority_queue<int,vector<int>,Rule>q;
    q.push(2); //[2]
    q.push(1); //[2,1]
    q.push(3); //[3,2,1]

    int n=q.size();
    for(int i=0;i<n;i++)
    {
        cout<<q.top()<<" ";
        q.pop();
    }



    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41066584/article/details/114660182