STL vector理解

Posted 姚二二二姚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL vector理解相关的知识,希望对你有一定的参考价值。

最近在知乎上看到一个回答:

https://www.zhihu.com/question/49995099

怎样读《二十四史》。重点在于苏轼有个读书的方法,“每书数过,一意求之”。读书要带着目的读,有所取舍,反复多次,才得到的多。

我一想,写代码看这些技术书也是啊。一次只看一个侧重点,反复多次。而不是每次都从头看,这样效率低下,学不到东西。

 

工作中经常使用vector,具体细节并未了解。通常情况下,如果长度固定的数据结构会使用数组,长度不定则使用vector。

最近又翻看了《STL源码剖析》,发现以前看不懂的地方可以看懂了。这次看源码剖析,就看vector。

 

首先需要有一个整体的概念。所谓vector,是一个动态的数组。使用的时候不需要像数组一样关心长度(但是同样有越界)。

使用[]操作符,同样需要考虑越界。不需要关心长度指的是往里面增加元素时,push_back时vector会动态增加。

 

数组和vector都是连续的内存空间。区别在于数组配置了就不能改变,需要变大,需要另外申请空间,把数据从原来的地方搬到新的地方。

这些工作需要用户(程序员)自己做。而vector不需要,它封装了这些操作。vector有很多实现版本。核心难点在于空间满载时,扩充空间时的三个操作,

申请新空间--数据迁移--释放旧空间

 

 

 

引用:

1.《STL源码剖析》

以上是关于STL vector理解的主要内容,如果未能解决你的问题,请参考以下文章

带你深入理解STL之Deque容器

由C++ STL的vector容器中存储的对象拷贝引起的对capacity属性 的理解

带你深入理解STL之Stack和Queue

带你深入理解STL之Deque容器

STL中vector,list,deque和map的区别

vector(未完)