zoukankan      html  css  js  c++  java
  • c/c++容器操作

    C++中的容器大致可以分为两个大类:顺序容器和关联容器。顺序容器中包含有顺序容器适配器。

    顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素。主要有vector、list、deque(双端队列)。顺序容器适配器:stack、queue和priority_queue。

    关联容器:支持通过键来高效地查找和读取元素。主要有:pair、set、map、multiset和multimap。

    注意:容器类是自动申请和释放内存,不需要进行new和delete操作。

    一、顺序容器

    1、顺序容器定义

    为了定义一个容器类型的对象,必须先包含相关的头文件:

    1    定义vector:  #include <vector>
    2    定义list:    #include <list>
    3    定义deque:   #include <deque>
    4.  定义queue:   #include <queue>
    5. 定义stack: #include <stack> //注意:stack和queue都是基于deque实现的,但是stack和queue比较常用

    定义示例

    1 vector<int>vec;//定义vector,常用
    2 list<int>lis;
    3 deque<int>deq;
    4 stack<int>sta;//定义栈,常用
    5 queue<int>que;//定义栈,常用

    2、顺序容器初始化

    函数模板 意义

    C<T> c;


    创建一个名为c的空容器。C是容器类型名,如vector,T是元素类型,如int或

    string适用于所有容器。

    C c(c2);

    创建容器c2的副本c;c和c2必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器。

    C c(b,e);

    创建c,其元素是迭代器b和e标示的范围内元素的副本。

    适用于所有容器。

    C c(n,t);

    用n个值为t的元素创建容器c,其中值t必须是容器类型C的元素类型的值,或者是可转换为该类型的值。

    只适用于顺序容器

    C c(n);

    创建有 n 个值初始化元素的容器 c。

    只适用于顺序容器

     3.vrctor容器的操作

     1 //vector的定义
     2 vector                   创建一个空的vector。
     3 vector  c1(c2)           复制一个vector
     4 vector  c(n)             创建一个vector,含有n个数据,数据均已缺省构造产生
     5 vector  c(n, elem)      创建一个含有n个elem拷贝的vector
     6 vector  c(beg,end)       创建一个含有n个elem拷贝的vector
     7 
     8 //vector的操作
     9 c.assign(beg,end)        将[beg; end)区间中的数据赋值给c。
    10 c.assign(n,elem)      将n个elem的拷贝赋值给c。 
    11 c.at(idx)          传回索引idx所指的数据,如果idx越界,抛出out_of_range。
    12 c.back()                 传回最后一个数据,不检查这个数据是否存在。
    13 c.begin()           传回迭代器中的第一个数据地址。
    14 c.capacity()         返回容器中数据个数。
    15 c.clear()            移除容器中所有数据。
    16 c.empty()            判断容器是否为空。
    17 c.end()              指向迭代器中末端元素的下一个,指向一个不存在元素。
    18 c.erase(pos)         删除pos位置的数据,传回下一个数据的位置。
    19 c.erase(beg,end)       删除[beg,end)区间的数据,传回下一个数据的位置。
    20 c.front()            传回第一个数据。
    21 get_allocator        使用构造函数返回一个拷贝。
    22 c.insert(pos,elem)      在pos位置插入一个elem拷贝,传回新数据位置。
    23 c.insert(pos,n,elem)    在pos位置插入n个elem数据。无返回值。
    24 c.insert(pos,beg,end)   在pos位置插入在[beg,end)区间的数据。无返回值。 
    25 c.max_size()            返回容器中最大数据的数量。
    26 c.pop_back()           删除最后一个数据。
    27 c.push_back(elem)       在尾部加入一个数据。
    28 c.rbegin()             传回一个逆向队列的第一个数据。
    29 c.rend()               传回一个逆向队列的最后一个数据的下一个位置。
    30 c.resize(num)          重新指定队列的长度。
    31 c.reserve()            保留适当的容量。
    32 c.size()                返回容器中实际数据的个数。
    33 c1.swap(c2)
    34 swap(c1,c2)           将c1和c2元素互换。同上操作。
    35 operator[]            返回容器中指定位置的一个引用。

    4.list的操作

     1 //list的定义
     2 list<int>ilist;
     3 
     4 //list的操作
     5 assign()        给list赋值 
     6 back()        返回最后一个元素 
     7 begin()       返回指向第一个元素的迭代器 
     8 clear()       删除所有元素 
     9 empty()       如果list是空的则返回true 
    10 end()         返回末尾的迭代器 
    11 erase()       删除一个元素 
    12 front()       返回第一个元素 
    13 get_allocator()   返回list的配置器 
    14 insert()       插入一个元素到list中 
    15 max_size()       返回list能容纳的最大元素数量 
    16 merge()        合并两个list 
    17 pop_back()       删除最后一个元素 
    18 pop_front()     删除第一个元素 
    19 push_back()     在list的末尾添加一个元素 
    20 push_front()     在list的头部添加一个元素 
    21 rbegin()        返回指向第一个元素的逆向迭代器 
    22 remove()       从list删除元素 
    23 remove_if()     按指定条件删除元素 
    24 rend()        指向list末尾的逆向迭代器 
    25 resize()        改变list的大小 
    26 reverse()       把list的元素倒转 
    27 size()         返回list中的元素个数 
    28 sort()         给list排序 
    29 splice()        合并两个list 
    30 swap()         交换两个list 
    31 unique()       删除list中重复的元素

    //deque因为笔者没用过所以不说明了

    5.stack和queue的操作

     1 //栈的定义
     2 格式:stack<数据类型>名称;
     3 stack<int>sta;
     4 
     5 //栈的操作
     6 sta.empty()     如果栈为空,则返回true,否则返回stack
     7 sta.size()      返回栈中元素的个数
     8 sta.pop()       删除栈顶元素的值,但不返回其值
     9 sta.top()       返回栈顶元素的值,但不删除该元素
    10 sta.push(item)     在栈顶压入新元素
    11 
    12 //队列的定义
    13 格式:queue<数据类型>名称;
    14 queue<int>que;
    15 
    16 //队列的操作
    17 q.empty()      如果队列为空,则返回true,否则返回false
    18 q.size()       返回队列中元素的个数
    19 q.pop()        删除队首元素,但不返回其值
    20 q.front()      返回队首元素的值,但不删除该元素,该操作只适用于队列
    21 q.back()       返回队尾元素的值,但不删除该元素,该操作只适用于队列
    22 q.top()        返回具有最高优先级的元素值,但不删除该元素,该操作只适用于优先级队列
    23 q.push(item)   对于queue,在队尾压入一个新元素,对于priority_quue,在基于优先级的适当位置插入新元素

    //关联容器笔者也没用过,也不会不阐述了  不过本人认为,容器的操作基本类似只要注意细节的处理就好了

  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/spring-hailong/p/6109702.html
Copyright © 2011-2022 走看看