vector运算起来是不是很慢啊?

来源:百度知道 编辑:UC知道 时间:2024/06/06 13:31:35
特别是在他的后面加数据 push_back()

真的好慢啊

vector在末尾加数据的运算原理是怎么样的
我是要大量的写入数据

写入了之后又要大量的读出

而且要求时间尽可能的快

那用什么最好

和用数组实现的链表一样,预先分配一个空间,然后存储,如若不够就要重新分配空间,赋值原空间的值,然后再插入。
vector中reserve()函数很重要是性能保证的前提。
C++ STL 提供了3个序列容器 :vector, deque, list
vector 中的元素是顺序存放的,所以随机访问很快,但是要插入和删除,这个时间复杂度就很高了,vector初始化时有一个capacity,如果元素个数超出capacity,那vector就会重新分配一个新的空间,并把旧值复制到新的空间中,释法原空间,这个也要耗费很多时间,所以如果你知道元素的最大值,最好用reserve()函数初始最大空间,避免重新分配空间造成的时间。
deque 几乎所有的操作都和vector一样,出了可以在头添加和删除,多了个push_front(), pop_front();
list 是双链表,元素在内存中是分散的不连续的,它使用指针left,right,指向前一个元素和后一个元素。所以要删除和添加只要动动指针,所以很快,但是因为是不连续的所以要访问一个元素,你只能遍历序列。

STL序列容器vector, deque, list使用箴言:

1.只添加或删除序列尾部的元素时,vector的效率是很高的。可以在vector的开头和中间插入元素,但其效率相当低。因为要移动插入点以后的所有元素并在自由存储区分配一个新内存区域。从开头和中间删除元素也比较慢,因为也要移动元素。
2.在序列容器的中间添加和删除元素应该使用list容器。实际上,使用list容器可以在序列的任意位置高效的插入元素而无需移动已有元素,删除list中的元素也比较快。list容器的主要限制是随机访问元素比较慢,因为这需要遍历整个list,所以一般STL的sort()算法不能用于list,因为它需要一个提供随机访问元素功能的迭代器。
3.创建给定大小的deque对象的方式与vector容器相同(与vetcor一样,在deque序列的中间可以添加和删除元素。但也比较慢,因为总是要复制已有的元素)。deque优于vector容器的地方是可以在序列开头和末尾高效的添加或删除对象,因此在需要这些功能时用选择这种类型的容器。