c++ stl泛型(一)

1.向量

vector向量容器不但能想数组一样随机访问元素,还能在尾部插入元素,简单,高效,完全可以代替数组


#include<iostream>
#include<vector>
#include<algorithm>//reverse反向排列算法需要此头文件
using namespace std;
int main()
{
    vector<int>v(3);//创建vector对象
    v[0]=0;
    v[1]=1;
    v[2]=2;
    //vector<int >v(3,1);//每个元素都赋值为1
    v.insert(v.begin(),3);//在第一个元素之前插入 :3 0 1 2
    v.insert(v.begin()+2,5);//在第三个元素之前插入:3 0 5 1 2
    v.insert(v.end(),7);//在最末尾追加新元素:3 0 5 1 2 7
    vector<int>::iterator it;//定义迭代器访问vector元素
    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.erase(v.begin()+2);//删除第二个元素(从0开始)3 0 1 2 7
    for(it=v.begin();it!=v.end();it++)
        cout<<*it<<" ";
    cout<<endl;

    v.erase(v.begin()+1,v.begin()+3);//删除迭代器第一到第三区间的元素 3 2 7
    for(it=v.begin();it!=v.end();it++)
        cout<<*it<<" ";
    cout<<endl;

    v.clear();//清空向量
    cout<<v.size()<<endl;//输出向量大小
    return 0;
}


2.string基本字符系列容器
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
int main()
{
    string s;
    s="hello world!";//赋值
    cout<<s<<endl;

    char ss[20];
    scanf("%s",ss);
    s=ss;//把字符指针赋给字符串对象(常用方法)
    cout<<s<<endl;

    s=s+'a';//在字符串尾部添加一个字符
    s=s+"123";//同s.append("abc");在字符串尾部追加字符串
    cout<<s<<endl;

    string::iterator it;//定义迭代器
    it=s.begin();
    s.insert(it+1,'p');//把字符‘p’插入到第一个字符前(位置从0开始)
    cout<<s<<endl;

    it=s.begin();
    s.erase(it+3);//删除第三个元素
    cout<<s<<endl;

    s.erase(it,it+2);//删除0-2区间的所有元素(第二个元素保留)
    cout<<s<<endl;

    s.replace(2,3,"good");//从第二个字符开始,将连续的三个字符替换为“good”
    cout<<s<<endl;

    int mark=s.find('a');//查找第一个字符‘a’,返回下标

    int flage=s.compare("I love you");//s比“I love you”大,返回1,比它小,返回-1,相等返回0

    reverse(s.begin(),s.end());//反向排序string对象迭代器所指向的一段区间的元素
    cout<<s<<endl;

    vector<string>v;//string对象作为vector元素
    v.push_back("Jack");
    cout<<v[0]<<endl;//输出“Jack”
    cout<<v[0][0]<<endl;//输出‘J’
    cout<<v[0].length()<<endl;//输出4
    return 0;
}


3.set集合容器

集合具有高效的删除处理功能,并自动重新调整内部的红黑树的平衡


#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<set>
using namespace std;
int main()
{
   set<int>s;
   s.insert(8);
   s.insert(1);
   s.insert(12);
   s.insert(6);
   s.insert(8);//第二次插入8,元素重复,不会插入
   set<int>::iterator it;//定义前向迭代器
   for(it=s.begin();it!=s.end();it++)//中序遍历集合中的元素
       cout<<*it<<" ";
    cout<<endl;

    set<int>::reverse_iterator rit;//定义反向迭代器,反向遍历集合中的元素
    for(rit=s.rbegin();rit!=s.rend();rit++)
        cout<<*rit<<" ";
    cout<<endl;

    s.erase(6);//删除值为6的元素
    it=s.find(8);//查找值为8的元素
    if(it!=s.end())//找到
        cout<<*it<<endl;
    else//没找到
        cout<<"not find it"<<endl;
    s.clear();//清空集合
    cout<<s.size()<<endl;//输出集合大小,为0
    return 0;
}



4.multiset多重集合容器
multiset与set一样,唯一不同的是multiset允许重复的元素插入,而set不允许


#include<iostream>

#include<stdio.h>
#include<algorithm>
#include<set>
using namespace std;
int main()
{
   multiset<string>s;//定义元素类型为string的多重集合对象s
   s.insert("abc");
   s.insert("123");
   s.insert("111");
   s.insert("aaa");
   s.insert("123");
   multiset<string>::iterator it;
   for(it=s.begin();it!=s.end();it++)
    cout<<*it<<" ";
   cout<<endl;

   int n=s.erase("123");//删除值为“123”的所有重复元素,返回删除元素总数n
   cout<<n<<endl;

   for(it=s.begin();it!=s.end();it++)//输出删除后剩余的元素
    cout<<*it<<" ";
   cout<<endl;

   it=s.find("123");
   if(it!=s.end())//找到
    cout<<*it<<endl;
   else//没有找到
    cout<<"not find it"<<endl;
   return 0;
}


5.map映照容器

#include<iostream>

#include<algorithm>
#include<map>
#include<string>
using namespace std;
struct mycomp//自定义函数,按键值由大到小顺序将元素插入到map中
{
    bool operator()(const int &a,const int &b)
    {
        if(a!=b)return a>b;
        else return a>b;
    }
};
int main()
{
    map<string,double> m;//定义map对象
    //插入元素,按照键值的由小到大放入红黑树中
    m["Jack"] = 98.5;
    m["Bomi"] = 96.0;
    m["Kate"] = 97.5;
    map<string,double>::iterator it;//前向遍历元素
    for(it=m.begin();it!=m.end();it++)
        cout<<(*it).first<<" : "<<(*it).second<<endl;//输出键值与映照数据

    map<int,char,mycomp>mm;
    mm[25] = 'm';
    mm[28] = 'k';
    mm[10] = 'x';
    mm[30] = 'a';
    mm[32] = 'b';
    mm.erase(28);//删除键值为28的元素

    map<int,char,mycomp>::reverse_iterator rit;//反向遍历元素
    for(rit=mm.rbegin();rit!=mm.rend();rit++)
        cout<<(*rit).first<<" : "<<(*rit).second<<endl;

    map<int,char,mycomp>::iterator rrit;
    rrit=mm.find(28);
    if(rrit!=mm.end())//搜索到该元素
       cout<<(*rrit).first<<" : "<<(*rrit).second<<endl;
    else cout<<"not find it"<<endl;//未找到
    for(rrit=mm.begin();rrit!=mm.end();rrit++)
        cout<<(*rrit).first<<" : "<<(*rrit).second<<endl;

    //数字映照字符的map写法
    string s="The number is ";
    cout<<s+mm[30]<<endl;
    return 0;
}


6.multimap多重映照容器

multimap与map基本相同,唯独不同的是multimap允许重复键值插入,所以,multimap元素的插入、删除、查找都与map不同


#include<iostream>

#include<algorithm>
#include<map>
#include<string>
using namespace std;
int main()
{
    multimap<string,double>m;
    m.insert(pair<string,double>("Jack",300.5));//插入元素
    m.insert(pair<string,double>("Kity",200));
    m.insert(pair<string,double>("Memi",500));
    m.insert(pair<string,double>("Jack",306));//重复键值“Jack”插入
    multimap<string,double>::iterator it;//定义前向迭代器中序遍历multimap
    for(it=m.begin();it!=m.end();it++)
        cout<<(*it).first<<" : "<<(*it).second<<endl;
    
    m.erase("Jack");//删除键值为“Jack”的元素
    it=m.find("Memi");//查找键值
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值