vector运算起来是否很慢啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vector运算起来是否很慢啊?相关的知识,希望对你有一定的参考价值。

特别是在他的后面加数据 push_back()

真的好慢啊

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

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

而且要求时间尽可能的快

那用什么最好

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

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

所以你可以试试deque的尾插法。
参考技术A 如果不是频繁的从中间删除元素的话,vector的性能还是不错的。
要大量删除元素请改用list。

当然,这些容器为了通用性与易用性,性能比你自己写个堆栈或链表是有所低的。但一般、甚至大多数需求都可以满足的。

不知道你做什么用途呢?

参考资料:经验

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

LINUX感觉上网速度好慢啊,而且进原系统感觉也很卡

VISTA系统,又装了一个红旗7.0的LINUX,感觉LINUX上网速度好慢哦,大家都这样吗? 而且我在VISTA系统,也感觉又点卡了,我的硬件配置很高的,怎么回事?难道LINUX影响另一个系统呢?
谢谢解答

这个 其实不好说 个人认为或许会有点影响 但你说得可能夸张了 更多的可能是你的心理作用
不要忽略了硬盘带来的性能影响 为了节省内存 很多时候很多程序都会利用硬盘作缓存等
那么 VISTA系统是不能识别LINUX的分区格式的 所以会不会因为你安装LINUX划分了EXT3、REISERFS等等之类的格式而影响硬盘寻址时的表现呢?
其次 你配置很高了 红旗7。0应该是带得动的才对(个人没用过红旗,不过看了下红旗默认的组件) 多查下红旗LINUX的设置 以前我因为LINUX没开启硬盘DMA严重影响过速度的 而LINUX上网速度个人认为会和VISTA差不了多少 LINUX是网络OS并不代表有提升网速的功能 他只是网络功能强大 对网络具有更多的可控性 还有它有一些可供调用的网络函数功能很强大 并不是它能带来网速的提升 要提升网速 应该给ISP多送些钱去
参考技术A 系统间上网怎么会互相影响?
心里作用吧
vista越用越卡

红旗7.0很卡倒是真的,7.0用kde4而且还是预测版,用ubuntu上网就比win快
上网主要看浏览器和dns设置,优化下吧

如果是其他linux,自己配置优化,速度都很快
参考技术B 我晕……你怎么会有这样一种感觉??
本人现在用的就是双系统!!在XP下,而且当XP下网速很慢时,我就会切回到LINUX.————对了,本人安装的是ubuntu DVD版本的,有丰富的论坛和很好玩的3D效果,很好用。http://forum.ubuntu.org.cn/viewtopic.php?f=94&t=183198&start=45

还有一点,vista本来就很卡的啦,此系统较安全性能方面比XP好,但它占内存,你内存最好用2G。

再就是你怎么分的区??我LINUX单独分了10G……根不不影响原系统。
也许是心理作用。
参考技术C 干嘛要装2个系统呢,红旗比vista差多了。如果想学习linux装虚拟机就好了。 参考技术D 不会啊,,估计是你感觉有问题吧,,,人们说linux上网要比windows快很多,,,我也是这样认为的,不知道你是怎么回事!你分区分的对么,,,,

以上是关于vector运算起来是否很慢啊?的主要内容,如果未能解决你的问题,请参考以下文章

myeclipse for Spring为啥打开xml文件很慢啊,有没有好的解决方法

打开杀毒软件后MyEclipse中启动Tomcat很慢?

LINUX感觉上网速度好慢啊,而且进原系统感觉也很卡

为啥模数运算符很慢?

向量的初始化很慢

c# winform 窗口控件多,就会加载很慢???