后台开发阅读笔记——STL之vector,map

vector的优点:
(1)、可以使用下标访问个别元素。
(2)、迭代器可以按照不同的方式遍历容器。
(3)、可以在容器的末尾增加或删除元素。
和其他标准顺序容器相比,vector能更有效访问容器内的元素和在末尾添加和删除元素,而在其他位置添加和删除元素,则不及其他顺序容器,在迭代器和引用也不比lists支持的好。

vector内存管理与效率:
1、vector内部是动态数组实现的,支持随机访问。
2、只要有元素需要插入而且容器的容量不足时就会发生重新分配,包括他们维护的原始内存分配和回收,对象的拷贝和析构和迭代器,指针和引用的失效。所以,避免重新分配的关键是使用reserve尽快把容器的容量设置为足够大,最好在容器构造后立刻进行。如果有大量数据需要进行push_back(),应当使用reserve()函数提前设定其容量大小,否则导致多次扩容导致效率低下。
3、vector是按照现在容量的一倍进行增长,其分配的是一块连续的内存空间,每次容器增长,并不是在原有连续内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把元素逐个赋值过去,同时销毁旧的内存。这时原有指向旧的内存空间的迭代器已经失效,所以操作容器时,迭代器要及时更新。

map:
map的内部数据组织,是自建一颗红黑树(一种非严格意义上的平衡二叉树),具有对数据自动排序的功能。
map的插入方式有三种:
1)、用insert函数插入pair数据:
map<int, string> tmpMap;
tmpMap.insert(pair<int, string>(1,“student1”));
2)、用insert函数插入value_type数据:
map<int, string> tmpMap;
tmpMap.insert(map<int, string>::value_type(1,“student1”));
3)、用数组方式插入:
map<int, string> tmpMap;
tmpMap[1] = “student1”;
注意,用insert插入时当map中有这个关键字时,insert操作是插入不了的。用数组会覆盖。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值