zoukankan      html  css  js  c++  java
  • c++ STL总结

    1.vector

     变长数组   
                  头文件:#include<vector>   
                  using namespace std;

    1.1定义:

    vector<typename> name; 
    vector<int> name;
    vector<double> name;
    vector<node> name;//node是结构体类型
    //如果typename也是一个STL容器,定义的时候>>符号之间要加上空格 即: vector<vector<int> > name;
    
    vector<vector<int> > name;
    //vector数组定义:
    vector<typename> arrayname[size];
    //arrayname[0]--arrayname[size-1]都是一个vector容器
    //与vector<vector<typename> > name 不同的是,vector数组写法一维长度已经固定,另一维变化

    1.2访问元素:

    /*
    两种访问方式:
    */
    // 1.通过下标访问
    vector<typename> vi;
    //直接访问 vi[index] 即可
    
    //2.通过迭代器访问:
    vector<typename>::iterator it;
    //通过 *it访问vector里的元素
    
    vector<int> vi;
    vector<int>::iterator it=vi.begin();
    printf ( " % d  n " , *( it+1) );
    
    //另一种写法
    for( vector<int>::iterator it=vi.begin();it!=vi.end();it++){
            printf("%d",*it)
    
    }
    // begin()函数的作用是取vi的首元素地址,end()函数取尾元素地址的下一个地址
    //只有vector和string中,才允许使用vi.begin()+n这中迭代器加证书的写法

    1.3 常用函数:

    // push_back()   ---------push_back(x)在vector后面添加一个元素x
    for(int i=1;i<=3;i++){
        vi.push_back(i);
    }
    
    //  pop_back()        ------------删除vector的尾元素
    
    //   size()           ---------------获得vector元素的个数
    printf("%d
    ",vi.size());
    
    //   clear()    ----------------清空vector中的所有元素
    
    //    insert() ---------------- insert ( it , x ) 向vector的任意迭代器it处插入一个元素x
    vi.insert(vi.begin+2,-1);
    
    //     erase() ---------------删除单个元素或者删除一个区间内所有元素
    vi.erase(it)// 删除迭代器为it处的元素
    vi.erase(vi.begin()+3)
    
    vi.erase(first,last) //删除【first,last)内所有元素
    vi.erase(vi.begin()+1,vi.begin()+4);//删除 vi[1] vi[2] vi[3]

    2.set 集合

    内部自动有序 不含重复元素
    头文件:#include using namespace std;

    2.1 set的定义:

    set<typename> name;
    //同样,如果typename是STL容器,定义时在>>之间加空格

    2.2 set内元素的访问—只能通过迭代器访问

    set<int>::iterator it;
    //通过*it来访问set元素
    
    for(set<int>::iterator it=st.begin();it!=st.end();it++){
            printf("%d",*it)   //不能通过*(it+n)这种方法访问元素
    
    }

    2.3 set 常用函数

    //   insert() ------insert(x) 将x插入set中,自动排序去重
    
    //   find()  -------find(value)  返回set中对应值为value的迭代器
    set<int> st;
    for(int i=1;i<4;i++){
        st.insert(i);
    }
    set<int>::iterator it=st.find(2);//在set中查找2,并返回其迭代器
    printf("%d",*it);
    或者 printf("%d",*(st.find(2)));
    
    //        erase() ---------- 删除单个元素  或者删除一个区间内所有元素
    //1.删除单个元素  两种方法:st.erase(it) -it为删除元素的迭代器       st.erase(value) -value删除元素的值
    st.erase(st.find(3));//结合find使用
    st.erase(100);//100为set内元素的值
    //2.删除一个区间内的所有元素    st.erase(first,last)  --first为删除区间起始迭代器,last为删除区间末尾迭代器的下一个地址
    st.erase(st.find(1),st.end());
    
    //       size()  - ------获得set内元素个数
    
    //       clear() --------清空set中的元素

    3 string

    头文件:#include using namespace std;

    3.1 string 的定义

    string str;
    string str="abcd";

    3.2 string的访问

    //  1.通过下标访问
    string str="abcd";
    for(int i=0;i<str.length();i++){
            printf("%c",str[i]);
    
    }
    
    //用c_str()将string转为字符数组
    
    //    2.通过迭代器输出
    string::iterator it;
    for(string::iterator it=str.begin();it!=end();it++){
        printf("%c",*it);
    }
    //  只有string 和 vector  支持 str.begin()+n  迭代器加数字这种写法

    3.3string 常用函数

    //    两个string拼接
    string str1="abc",str2="def";
    string str3;
    str3=str1+str2;
    cout<<str3;
    //    两个string直接用 == !=  < <= > >=比较大小-----按照字典序
    
    //    length() /  size()   --返回string的长度
    
    //    insert()  
    1. insert(pos,string) ---在pos位置插入字符串string
    str.insert(3,"ancsd");
    
    2.insert(it,it2,it3)------it为原字符串的欲插入位置,it2 和it3为待插入字符串的首尾迭代器,用来表示串【it2,it3)将被插在it位置上
    str.insert(str.begin()+3,str2.begin(),str2.end());
    
    //           erase()
    1.删除单个元素     erase(it) ---删除单个元素 it为需要删除元素的迭代器
    str.erase(str.begin()+4);
    
    2.删除一个区间内元素  erase(first,last) --删除【first,last) first last均为迭代器
    str.erase(str.begin()+2,str.end());
    erase(pos,length)--pos为开始删除的起始位置,length为删除的字符个数
    str.erase(3,2)   ----删除3号位开始的2个字符
    
    
    //          clear()  清空string中的数据
    
    
    //           substr() ----------substr(pos,len) 返回从pos号位开始,长度为len的子字符串
    str.substr(0,4);
    
    
    //            find()   -----
    1. str.find(str2) 当str2是str的子串时,返回其在str中第一次出现的位置,如果不是,返回string::npos
    2. str.find(str2,pos)  从str的pos位置开始匹配str2,返回值与上面相同
    
    //            replace()      
    1. replace(pos,len,str2)  ----吧str从pos号位置开始,长度为len的子串替换为str2
    2. replace(it1,it2,str2)------把str的迭代器【it1,it2)范围的子串替换为str2

    4.map

    映射 ,可以将任何基本类型映射到任何基本类型

    头文件:#include using namespace std;
    map会以键从小到大的顺序自动排序(set)也是,因为他们内部是用红黑树实现

    4.1 map的定义

    map<typename1,typename2> mp;    //第一个是键的类型,第二个是值的类型
    map<string,int> mp;  //如果是字符串到整形的映射,必须使用string不能用char数组
    //也可以是STL容器
    map<set<int>,string> mp;

    4.2 map内元素的访问

    //  1.通过下标访问
    map中的键是唯一的
    map<char,int> mp;
    mp['c']=20;
    mp['d']=30;
    printf("%d",mp['c']);
    
    //     2.通过迭代器访问
    map<typename1,typename2>::iterator it;
    通过 it->frist 来访问键, 使用 it->second 访问值
    mp['c']=20;
    mp['d']=30;
    for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
        printf("%c %d
    ",it->first,it->second);
    
    }

    4.3 map常用函数

    //   find() ------find(key)返回键为key的映射的迭代器
    mp['c']=20;
    mp['d']=30;
    map<char,int>::iterator it=mp.find('b');
    printf("%c %d",it->first,it->second);
    
    //    erase() 
    // 删除单个元素两种方法   
    1.erase(it)--it为需删除元素的迭代器
    mp['c']=20;
    mp['d']=30;
    map<char,int>::iterator it=mp.find('b');
    mp.erase(it);
    2.erase(key) --key为欲删除的映射的键
    mp['c']=20;
    mp['d']=30;
    mp.erase('c');
    //删除一个区间内的 所有元素
    mp.erase(first,last) fisrt为删除区间起始迭代器,last为删除区间末尾迭代器的下一个地址
    mp['c']=20;
    mp['d']=30;
    mp.erase(it,mp.end());
    
    //   size() ---返回map中映射的对数
    
    //   clear() -----清空map中的元素

    5.queue

    队列,先进先出的容器

    头文件:#include using namespace std;

    5.1 queue的定义:

    queue<typename> name;

    5.2 queue容器内元素的访问

    // queue 先进先出    只能通过front来访问队首元素,通过back来访问队尾元素
    queue<int> q;
    for(int i=1;i<=5;i++){
        q.push(i);//push(i)将i压入队列,依次入队的是1 2 3 4 5
    }
    printf("%d %d",q.front(),q.back());

    5.3 queue 常用函数

    //     push() ----push(x)将x进行入队
    
    //     front() back() 分别获得队首元素和队尾元素
    
    //     pop()  ----令队首元素出队
    queue<int> q;
    for(int i=1;i<=5;i++){
        q.push(i);//push(i)将i压入队列,依次入队的是1 2 3 4 5
    }
    for(int i=1;i<=3;i++){
        q.pop()
    }
    
    //  empty()---检测queue是否为空,返回true则空,返回false则非空
    
    //   size() ---返回queue内元素的个数

    6.priority_queue

    优先队列 底层用堆实现 队首元素一定是当前队列中优先级最高的一个

    头文件:#include using namespace std;

    6.1 priority_queue的定义

    priority_queue<typename> name;

    6.2 priority_queue 容器内元素的访问

    优先队列没有front函数和back函数,只能通过top函数访问队首元素
    q.push(3);
    q.push(4);
    printf("%d",q.top());

    6.3priority_queue 常用函数

    //    push() ----push(x)将x入队
    
    //    top()   ----获得队首元素
    
    //    pop() ------令队首元素出队
    
    //    empty()  -----检测优先队列是否为空,空返回true,非空返回false
  • 相关阅读:
    jQuery万能放大镜插件(普通矩形放大镜)
    Mysql增量写入Hdfs(二) --Storm+hdfs的流式处理
    Mysql增量写入Hdfs(一) --将Mysql数据写入Kafka Topic
    Spark SQL,如何将 DataFrame 转为 json 格式
    贝叶斯分类算法实例 --根据姓名推测男女
    从分治算法到 Hadoop MapReduce
    Actor模型浅析 一致性和隔离性
    写博客的思考
    scala模式匹配详细解析
    [转] Scala 中的异步事件处理
  • 原文地址:https://www.cnblogs.com/nncurry/p/12758485.html
Copyright © 2011-2022 走看看