今日学习札记——STL常用容器:vector、list、set和multiset、map和multimap(11.17)

来源:互联网 发布:java request 编辑:程序博客网 时间:2024/06/05 02:33
1.vector,头文件#include <vector>
(1) 声明方法:vector<Type> 变量;
范例:
int main()
{
    vector<int> IntArray(3);
IntArray[0] = 1;
IntArray[1] = 3;
IntArray[2] = 7;


    cout << IntArray[0]<< endl;
    return 0;
}



(2)成员函数列表
(1) vector()   //大小为零的容器
    vector(n)  //大小为n的容器
    vector(n,const T &t) //初始数据为t
    vector( const vector &x) //复制构造函数
(2) void push_back(const T &x)   //在容器后端插入数据x
    void pop_back()              //在容器后端删除数据
(3) void insert(iterator pos, const T &x)   //将x插在pos位置前端
(4) iterator erase(iterator pos)    //将pos位置的元素清除
    iterator erase(iterator first, iterator last)  //将first到last的元素清除
    void clear()    //全部清除
(5) iterator begin()  //返回第一个元素的指针
    iterator end()    //返回最后一个元素的指针
(6) size()    //大小
(7) empty()   //是否为空
(8) reference front()  //返回第一个元素
    reference back()   //返回最后一个元素
    reference at(pos)  //返回第pos个位置的元素
(9) void swap(vector &x)  //将容器的内容与x容器互换
(10) operator[]        //以传统数组方式存钱容器中的元素


(3)在使用容器定位器之前,要先声明vector定位器:(包含头文件#include <iterator>)
           vector<Type>::iterator 定位器名称;
例子:


//函数PrintOut
void PrintOut(vector<int> &container){
    if(container.empty())
        cout<<"The Container is Empty!"<<endl;
    else{
            //迭代器声明方法
            vector<int>::iterator iter;
            for(iter = container.begin(); iter != container.end();iter++)
                cout <<*iter;
            cout<<endl;
        }
}


int main()
{
    vector<int> IntArray(3);
IntArray[0] = 1;
IntArray[1] = 3;
IntArray[2] = 7;


    //1.输出IntArray
    cout << "Data in IntArray: ";
    PrintOut(IntArray);


    //2.Push_back两个元素
    cout<<"Push two element(4,5) in the IntArray"<<endl;
    IntArray.push_back(4);
    IntArray.push_back(5);
    cout << "Data in IntArray: ";
    PrintOut(IntArray);


    //3.用insert插入一个元素
    cout<<"Insert elements(6) in front of IntArray"<<endl;
    IntArray.insert(IntArray.begin(),6);
    cout << "Data in IntArray: ";
    PrintOut(IntArray);


    //4.用erase擦除最后一个元素
    cout<<"Erase last element in the IntArray"<<endl;
    IntArray.erase(IntArray.end()-1);  //end()-1指向最后一个元素
    cout << "Data in IntArray: ";
    PrintOut(IntArray);


    //5.用pop_back删除最后两个元素
    cout<<"Delete last two elements in the IntArray"<<endl;
    IntArray.pop_back();
    IntArray.pop_back();
    cout << "Data in IntArray: ";
    PrintOut(IntArray);


    //6.根据位置返回元素
    cout<<"First elements: "<<IntArray.front()<<endl;
    cout<<"Second elements: "<<IntArray.at(1)<<endl;
    cout<<"last elements: "<<IntArray.back()<<endl;


    //7.用数组方式遍历
    for(int i = 0; i< IntArray.size(); i++)
        cout<<IntArray[i];




    return 0;
}


--------------------------------------
2. list,头文件:#include <list>
list容器是一种双向链接的串行,每一个元素都知道前面一个与后面一个元素;但list容器并不能利用[]运算符来随机存取数据。
(1)声明方法: list<Type> 变量;
范例:
int main()
{
    //1.头插法构造L
    list<int> L;
    L.push_front(1);
    L.push_front(3);
    L.push_front(7);


    //2.尾插法构造L
    L.push_back(4);
    L.push_back(5);
    L.push_back(6);




    cout << L.front() << endl;
    cout << L.back() <<endl;
    return 0;
}


(2)成员函数列表
(1) list()    //大小为零的容器
    list(n)   //大小为n的容器
    list(n, const T &t)   //初始数据为t
    list(const list& x)   //复制构造函数
(2) void push_front(const T &t)   //在容器前端插入数据t
    void pop_front()              //在容器前端删除数据
    void push_back(const T &t)    //在容器后端插入数据t
    void pop_back()               //在容器后端删除数据
(3) void insert(iterator pos, const T &x)  //将x插入到pos位置的前端
(4) iterator erase(iterator pos)           //将pos位置的元素清除
    iterator erase(iterator first, iterator last) //将first到last的元素清除
    void clear()   //全部清除
(5) iterator begin()   //返回第一个元素的指针
    iterator end()     //返回最后一个元素的指针
(6) size()     //尺寸
(7) bool empty() //是否为空
(8) reference front()  //返回第一个元素
    reference back()   //返回最后一个元素
    reference at(pos)  //返回第pos个位置的元素
(9) void swap(lsit &x) //交换两个list容器
(10) void merge(list &x) //将x容器与自己结合
(11) void sort()   //以递增方式排序
(12) void remove(const T &x)  //删除容器中内容为x的元素


(3)在使用容器定位器之前,要先声明vector定位器:(包含头文件#include <iterator>)
           list<Type>::iterator 定位器名称;


---------------------------------------
3.set和multiset容器,包含头文件:#include <set>
[set 集合]在set容器中,每一个元素的关键值必须都不同,而multiset容器中则允许有重复的关键值。
(1)声明方法:set<Type> 变量;
               set<Type, less<key> > 变量;  //排序方式通常需要传入一个排序的函数对象,注意后面那个>必须要用空格隔开
               multiset<Type> 变量;
               multiset<Type, less<key> > 变量; 
范例:
int main()
{
    typedef set<string, less<string> > string_set;
    string Months[] ={"January","February","March","April","May","June","July"};
    string_set S(Months,Months+7);


    cout << *S.begin() << endl;
    return 0;
}


(2)成员函数列表
(1) set()   //大小为零的容器
    set(const key_compare& comp)  //大小为零的容器,使用comp这种排序方式
    set(const set &x)     //复制构造函数
    multiset()
    multiset(const key_compare& comp)
    multiset(const multiset &x)
(2) iterator erase(iterator pos)  //将pos位置的元素清除
    iterator erase(const key_type & k)  //将关键字为k的元素删除
    void clear()   //全部清除
(3) iterator begin()  //返回第一个元素的指针
    iterator end()    //返回最后一个元素的指针
(4) size()    //大小
(5) bool empty()  //是否为空
(6) iterator find(const key_type &k)  //将关键字为k的元素找出,并返回一个指向这个元素的指针
(7) iterator upper_bound(const key_type &k)  //寻找第一个关键字不小于k的元素
    iterator lower_bound(const key_type &k)  //寻找第一个关键字不大于k的元素
(8) void swap(set &x)   //将容器内容与x容器互换
    void swap(multiset &x) 


(3)在使用容器定位器之前,要先声明vector定位器:(包含头文件#include <iterator>)
           set<Type>::iterator 定位器名称;
           multiset<Type>::iterator 定位器名称;
           
----------------------------------------
4.map和multimap容器,包含头文件#include <map>
[map 复数集合]map/multimap容器中的每一项元素能存储相关键值和对应的数据,并按键值来进行排序的。
(1)声明方法:map<Type1,Type2> 变量;
               map<Type1,Type2, less<Type2> > 变量;  //排序方式通常需要传入一个排序的函数对象,注意后面那个>必须要用空格隔开
               multimap<Type1,Type2> 变量;
               multimap<Type1,Type2, less<Type2> > 变量; 
范例:
int main()
{
    typedef map<string, string, less<string> > string_map;
    string_map M;
    string_map::iterator iter;


    M.insert(string_map::value_type("3","5.56"));
    M.insert(string_map::value_type("7","2.23"));
    M.insert(string_map::value_type("5","13.14"));
    cout << "Data in M:" << endl;
    for(iter = M.begin(); iter!=M.end(); iter++)
        cout<<iter->first<<"+"<<iter->second<<"i"<<endl;
    return 0;
}


(2)成员函数列表
(1) map()   //大小为零的容器
    map(const key_compare &comp)  //大小为零的容器,使用comp这种排序方式
    map(const map &x)   //复制构造函数
    multimap()
    multimap(const key_compare &comp)
    multimap(const multimap &x)
(2) iterator erase(iterator pos)
    iterator erase(const key_type &k)
    void clear()
(3) iterator begin()
    iterator end()
(4) size()
(5) bool empty()
(6) iterator find(const key_type &k)
(7) iterator upper_bound(const key_type &k)
    iterator lower_bound(const key_type &k)
(8) void swap(map &x)
    void swap(multimap &x)
    
(3)在使用容器定位器之前,要先声明vector定位器:(包含头文件#include <iterator>)
           map<Type1,Type2>::iterator 定位器名称;
           multimap<Type1,Type2>::iterator 定位器名称;

1 0
原创粉丝点击