c++ STL

to_string函数可以将数字转换为string类型。

stable_sort()排序不改变相同值元素的顺序
scanf("%[^\n]",s);
替代gets的方法

1.vector

//(1)一维
    vector<int> v1;
    v1.push_back(100);
    v1.pop_back();//删除尾部元素
    v1.clear();
    sort(v1.begin(),v1.end(),less<int>());
    //stable_sort()排序不改变相同值元素的顺序
    v1.push_back(100);
    v1.push_back(1000);
    reverse(v1.begin(),v1.end());
    int i,len1=v1.size();
    for(i=0; i<len1; ++i)
    {
        cout<<v1[i]<<" ";
    }
    v1.insert(v1.end(),5,3);//在尾部插入5个值为3的元素
    v1.erase(v1.begin());   //删除一个指定的元素,后面元素前移
    v1.erase(v1.begin(),v1.begin()+2);
    //删除v1[0]--v1[2]之间的元素,后面的元素后移
    vector<int>v2;
    cout<<(v1>=v2)<<endl;//从前向后进行比较
    vector<mmp>v3;
    v3.push_back({1,2});
    //(2)二维
    int n1=10,n2=20;
    vector<vector<int>> v2(n1,vector<int>(n2));//设置数组长度,默认初始值(默认初始值为0)
    vector<vector<int>> v3(n1,vector<int>(n2,0));//设置数组长度,给定值初始
    vector<int> v4={{1,2,3},{2,5,6}};
    vector<vector<int>> v5(r);//每行不一定几个数,就是想对每行的列进行操作
    v5[i].push_back(1);//这就是该第i-1行的插入一个元素,值为1
    vector<vector<int>> v6;//不指定大小
    
    int arr[] = {11, 32, 41, 25, 67, 100, 88, 233};  // 列表初始化内置数组
    vector<int> iv(begin(arr), end(arr));
    vector<int> iv(arr, arr+8);
    for(auto c:iv)  // 输出 vector 对象的内容以验证结果
        cout << c << ' ';
    cout << endl;

2.queue

void solve()
{
    queue<int>q1;
    q1.push(100);
    cout<<q1.front();//队首元素
    cout<<q1.back();//队尾元素
    while(!q1.empty())
    {
        cout<<q1.front()<<" ";
        q1.pop();
    }
}

3.priority_queue

优先级队列的时间复杂度为O(nlogn)

struct mmp
{
    int a,b;
    bool operator<(const mmp &w)const
    {
        if(b==w.b)
        {
            return b>w.b;
        }
        return a<w.a;//大的在前面
    }
};

void solve()
{
    priority_queue<int,vector<int>,less<int> >q1;
    priority_queue<int>q2;//默认从大到小
    q1.push(100);
    while(!q1.empty())
    {
        cout<<q1.top()<<" ";
        q1.pop();
    }
    priority_queue<mmp>q3;
    while(!q3.empty())
    {
        cout<<q3.top().a<<" "<<q3.top().b<<endl;
        q3.pop();
    }
}

4.string

void solve()
{
    char s[100]= {"12"};
    string s1="12";
    s1=s;
    s1=s1+"34";
    s1.insert(s1.begin()+2,'2');
    s1.erase(s1.begin());   //删除某一个位置的元素
    s1.erase(s1.begin(),s1.end()-1);//删除某一个区间的元素
    for(int i=0; i<s1.size(); ++i)
    {
        cout<<s1.at(i)<<endl;
    }
    cout<<s1<<endl;
    int pos=s1.find("12");
    if(pos<0)
    {
        cout<<"不含该字串"<<endl;
    }
    else
        cout<<pos<<" "<<"找到字串的起始位置"<<endl;
    reverse(s1.begin(),s1.end());
    sort(s1.begin(),s1.end());
    s1.replace(1,2,"3");//在位置1处替换原字符中长度为2的字符串

    string A("aBcd");
    string B("Abcd");
    cout << "A.compare(B):" << A.compare(B)<< endl;
    s1.push_back('a');//队尾添加字符
    s1.insert(s1.begin(),'1');//在制定的位置pos前插入字符char
}

5.map

//map 一种映射关系,可以建立string型到int型的映射,就好比数组一样
//map需要确定映射类型(键key)和映射后类型(值value)
void solve()
{
    map<string,int>mp;
    mp["a"]=1;  //会覆盖掉原关键字的值
    cout<<mp["a"]<<endl;
    map<string,int>::iterator it;
    for(it=mp.begin(); it!=mp.end(); it++)
    {
        cout<<it->first<<" "<<it->second<<endl;
    }
    map<string,int>::reverse_iterator it2;
    for(it2=mp.rbegin(); it2!=mp.rend(); it2++)
    {
        cout<<it2->first<<" "<<it2->second<<endl;
    }
    mp.clear();
    mp.erase("b");
    mp.erase(mp.begin(),mp.end());
    cout<<mp.size()<<" "<<mp.empty()<<endl;
}

6.stack

//栈 后进先出		
void solve()
{
    stack<int>st;
    st.push(1);
    while(!st.empty())
    {
        cout<<st.top()<<endl;
        st.pop();
    }
}

7.set

//set译为集合,是一个内部自动递增排序且去除了重复元素的容器
void solve()
{
    int p[10]={1,2,3,4,5,6};
    set<int>st1(p,p+10);
    set<int>st;
    st.insert(1);
    st.erase(1);//删除值为1的元素
    //二分查找
    cout<<"第一个大于等于0的值:"<<*st.lower_bound(0)<<endl;
    cout<<"第一个大于0的值:"<<*st.upper_bound(0)<<endl;
    set<int>::iterator it1;
    for(it1=st.begin();it1!=st.end();it1++)
    {
        cout<<" "<<*it1<<endl;
    }
    set<int>::reverse_iterator it2;
    for(it2=st.rbegin();it2!=st.rend();it2++)
    {
        cout<<" "<<*it2<<endl;
    }
    cout<<st.size()<<" "<<st.count(1)<<endl;
    it1=st.find(2);
    st.erase(it1,st.end());
    st.clear();
}

8.pair

//pair是将2个数据合成一个数据
int cmp1(pair<int,int>a,pair<int,int>b)
{
    if(a.first!=b.first)
        return a.first>b.first;     //根据first降序
    else
        return a.second<b.second;   //根据second升序
}
struct cmp2
{
    bool operator()(const pair<int,int> q1,const pair<int,int>q2)
    {
        if(q1.first==q2.first)
            return q1.second>q2.second; //根据second升序
        else
            return q1.first<q2.first;   //根据first降序
    }
};

void solve()
{
    pair<int,int>p1;
    p1=make_pair(1,3);
    cout<<p1.first<<" "<<p1.second<<endl;
    pair<int,int>p2[10];
    p2[1]=make_pair(2,4);
    cout<<p2[1].first<<" "<<p2[1].second<<endl;
    vector<pair<int,int> >p3;
    p3.push_back({1,11});
    sort(p3.begin(),p3.end(),cmp1);
    int len=p3.size();
    for(int i=0; i<len; ++i)
    {
        cout<<p3[i].first<<" "<<p3[i].second<<endl;
    }
    priority_queue<pair<int,int>,vector<pair<int,int> >,cmp2>p4;
    p4.push({2,2});
    while(!p4.empty())
    {
        cout<<p4.top().first<<" "<<p4.top().second<<endl;
        p4.pop();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值