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

原创 2015年11月17日 21:50:23
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 定位器名称;

相关文章推荐

STL容器 set、 multiset、map、multimap

Set和Multiset 会根据特定的排序准则,自动将元素排序。两者不同之处是multiset允许元素重复而set不允许。set、 multiset的能力set和multiset通常以平衡二叉树完成,...

八、STL中的关联容器set/multiset、map/multimap

STL中的关联容器set/multiset、map/multimap

map vector list const multimap set multiset总结

stronger C++ Primer学习笔记(第9章-第11章) const使用总结 const修饰变量,表示该变量为常量,必须在定义是初始化,且不...

stl的set,multiset, map, multimap, deque, list, stack, queue, priority_queue

set实际上是平衡二叉树,需要声明头文件#include Insert:将元素插入集合中 使用前向迭代器对集合中序遍历 使用反向迭代器reverse_iterator可以反向遍历集合,需要用到r...

初识STL——set,multiset,map,multimap

最近在学习STL,在前期分析了vector和list的源码,印象很深,感觉对自己以后的代码之路产生了很多改变,今天,介绍下STL当中的几个关联式容器。本博客所有论述的都为SGI版本的STL。1.什么是...

今日学习札记——<string>模板类(11.17)

1.string 的定义:typedef basic_string string; 所以,我们只要利用string关键字,就能生成一个以basic_string模板类 所衍生而出的对象。 范例1:...

STL源码剖析之map set multimap multiset【2013.12.10】

STL源码剖析之map set multimap multiset【2013.12.10】 欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427...
  • xinmuba
  • xinmuba
  • 2013年12月11日 10:34
  • 1144

STL总结之set/multiset和map/multimap

set和Multiset:

STL 之 初识set multiset(map multimap)

一:起因 (1):set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高,具体实现采用了...

STL模板总结归纳(set,multiset和map,multimap)

这四种关联式容器可以分成两组:set和map。 set是一种集合,其中可包含0个或多个不重复的和不排序的元素,然后默认从小到大排序输出。 (若要从大到小排:创建实例set>iset;) mult...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:今日学习札记——STL常用容器:vector、list、set和multiset、map和multimap(11.17)
举报原因:
原因补充:

(最多只允许输入30个字)