栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ STL vector容器详解——(2)push

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ STL vector容器详解——(2)push

1.push_back()

push_back()函数用来往vector的末尾插入新元素,它的具体实现源码如下(基于G2.9):

 

1.push_back函数首先会检查是否还有空间,有就插入,没有就调用insert_aux

2.insert_aux也会先做一次剩余空间判断,这是因为调用该函数的不止push_back,可能存在其他插入函数没有做剩余空间检查。如果没有剩余空间,则根据原大小的n倍来计算新空间的大小,然后在内存中找到可以存放这个大小内容的空间。(这就是vector的n倍增长特性)

3.insert_aux找到新空间后会先把原地址的内容拷贝到新空间,再插入新元素,最后将原地址插入点后的内容也拷贝过去。同样也是因为调用该函数的不止vector容器,有些容器可以在中间插入,则需要将前后内容都拷贝。

4.最后将源地址空间的内容逐个释放。

由此可以看出vector的使用非常简单友好,但是存在大量拷贝和释放操作,也就是会不断地调用拷贝构造函数和析构函数,在使用vector时需要考虑到这个成本。

2.vector的迭代器

vector的结构是连续的,vector迭代器所需要的操作普通指针就可以做到,因此不需要特别的写一个智能指针(迭代器)。

根据之前学习的Iterator Traits(萃取机),vector的迭代器将通过普通指针的偏特化版本iterator_traits来回答五个问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870113.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号