今日学习札记——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 定位器名称;

map,set,multimap,multiset的异同

map的特性是,所有元素都会依据元素的键值自动排序,map的所有元素都是键值对,同时有实值value和键值key。键值对的第一元素被视为键值,第二元素视为实值,map不允许两个元素有相同的实值 注意:...
  • qq_36221862
  • qq_36221862
  • 2017年05月30日 09:00
  • 302

c++STL容器(map,set,vector,stack,queue)

1.Map Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对...
  • sinat_35121480
  • sinat_35121480
  • 2016年12月21日 00:58
  • 1475

C++:关联容器(set,multiset,map,multimap)

关联容器(associative container)是对容器概念的一种改进. 关联容器将值与键关联在一起,并使用键来查找值。 例:值可以是表示员工信息(如姓名,电话,地址,性别,健康计划等)的结...
  • u010921682
  • u010921682
  • 2015年04月20日 20:15
  • 978

C/C++--STL中list,vector,deque,map,set区别、联系和使用场景

原谅地址:http://www.lifecrunch.biz/archives/202 vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此 它...
  • zlQQhs
  • zlQQhs
  • 2014年06月16日 20:46
  • 3136

stl容器的区别:vector list deque set map-底层实现

申明,本文非笔者原创,原文转载自:http://blog.sina.com.cn/s/blog_533074eb01017zq2.html 在STL中基本容器有: vector、li...
  • carson2005
  • carson2005
  • 2015年04月29日 11:08
  • 2085

STL中list,vector,deque,map,set区别、联系和使用场景原理

一、Vector:动态数组       vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取,即[]操作符,但由于它的内存空间是连...
  • caojunhao123
  • caojunhao123
  • 2013年09月22日 20:35
  • 2084

从零开始_学_数据结构(五)——STL(map、set、list、vector)

STL容器   前注: STL(标准模板库)是一个C++的软件库,也是C++标准程序库的一部分。 这些容器,应该都是STL里面的一个类。 vector封装数组、list封装链表、map和se...
  • qq20004604
  • qq20004604
  • 2016年03月28日 11:05
  • 1109

stl容器区别(内存布局和使用场合): vector list deque set map

set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问。  set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少  map:映射,相当于字典,把一个值映射成另一个值...
  • u012223913
  • u012223913
  • 2016年04月22日 22:27
  • 1270

STL vector+sort排序和multiset/multimap排序比较

本文由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进...
  • u011809276
  • u011809276
  • 2014年11月05日 13:55
  • 431

实例讲解,set,multiset,map,multimap关联容器

测试环境:windows 7 vs2010 内部元素有序排列,新元素插入的位置取决于它的值,查找速度快。 除了各容器都有的函数外,还支持以下成员函数: find: 查找等于某个值的元素(x小于y和y...
  • huangshanchun
  • huangshanchun
  • 2015年08月03日 21:25
  • 1070
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:今日学习札记——STL常用容器:vector、list、set和multiset、map和multimap(11.17)
举报原因:
原因补充:

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