C++ 容器汇总(未完,待续)

1.    Vector

Vector实际是动态数组,在堆中分配,元素连续存放,如果插入新值大于当前分配大小时,会重新分配内存。

由于vector内存空间连续,所以在中间插入或删除会造成内存块的拷贝,因此不适用于经常对中间位置元素进行添加或删除的情景;最好在vector中保存结构或者类的指针,这样可以避免是移动是产生的构造与析构的开销;

2.    Map

Map是关联容器,以键值对的形式进行存储,以红黑树的结构实现,插入和删除等操作都是O(logn)。

(1)    使用说明

A.添加数据

map<int,string>maplive;
maplive.insert(pair<int,string>(102,"aclive")); 

maplive.insert(map<int,string>::value_type(321,"hai"));

maplive[112]="April";//map中最简单最常用的插入添加!

     B.查找数据

     Find()函数返回一个迭代器指向键值为key的元素,如果没有找到就返回指向map尾部的迭代器。

     map<int,string>::iterator I_it;

    I_it = maplive.find(112);

     If( maplive.end == I_it )//没有找到

     Else

      Cout<<I_it->first<<I_it->second;

    C.删除数据

     在删除数据时先查找要删除的数据是否存在,存在才删除。

     map<int,string>::iterator I_it;

    I_it = maplive.find(112);

 If ( maplive.end !=I_it)

 {

       maplive.erase(I_it);

}

D. map中sort问题

Map中的元素自动按key升序排序,因此不能对map使用sort函数

E. map中swap用法

Map中swap不是一个容器中的元素交换,而是两个容器交换

Map<int,int> M1,M2;

M1[1] = 10;

M1[2] = 20;

M1[3] = 30;

M2[1] = 10;

M2[2] = 50;

M1.swap(M2)

3.    Multimap

Multimap允许重复的键值插入容器。

4.    List

List本质是双向链表,能快速的进行插入和删除操作,但是随机访问比较慢。

(1)    正向与反向迭代器

反向迭代器允许从尾到头遍历list,该功能源于list本质是双向链表,存在向前的指针。

5.    Deque

Deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素。Deque被表示为一个分段数组,容器中的元素分段存放在一个个大小固定的数组中,此外deque还需要维护一个存放这些数组首地址的的索引数组,基于这点设计原理,deque可以实现随机访问,但是效率比vector低很多,具体结构图如下:

向两端添加数据时,如果这一端的分段数组未满,则可以直接加入,如果分段数组已满,需要创建新的分段数组,并把该分段数组的首地址加入到索引数组中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值