为啥说传vector的效率很低????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥说传vector的效率很低????相关的知识,希望对你有一定的参考价值。
stl的实现是怎样的??
为什么说复制vector等stl的效率很低。
sizeof的结果为4, 传递起来应该效率很高啊!
用句柄类怎么样?效率如何?
我问得是为什么复制vector的效率很低。
谢谢!
针对一般的简单操作来说,用容器代替数组是很明智的方法,因为数组的操作是在是不灵活.比如说:当你定义一个数组的时候,你肯定事先要定义这个数组的长度,就是说你在之后对这个数组的操作的时候,存放的数据最多不能超过这个长度,假如要增加空间的话,会很麻烦. 假如这里用vector来操作,就不必那么麻烦,vector没有硬性规定需要分配空间,就是说,当你存放的数据过多时,它会自动分配空间来保证所有的数据都有存放在vector里,当然,也可以手动分配.
对于其他类似复制操作的话,效率差不多,创建一份副本的方法,无论用什么都是一样的.
STL的开发初衷就是为了节省不必要的数据处理,目前看来最实用的属vector,map和string了.它们分别针对N维数组,二叉树或链表和字符串进行优化操作方式,以简明的方法来达到以前要写很冗长的代码才能完成的目的.总的来说STL就是许多对数据集合,字符串等优良算法的集合体 参考技术A 首先要看你的需求到底完成什么,假如能单纯用数据简单处理就能搞定的话,也就没必要用stl了,但是别听人瞎说,实际上vector的处理效率很高,stl囊括了非常优秀的算法,说stl效率的低的你叫它们自己写个效率高的出来。最后一句,编程的目的是完成需求。
list基本使用
list和vector的用法基本相同,区别如下:
-
list可以头尾插入和删除,效率一样,vector只有尾部插入和删除效率才高,头部操作效率很低
-
list的排序有专有的接口,不能使用全局的接口,原因是list中的节点不能随机访问,vector中的节点可以随机访问
-
vector是连续存储,list不是连续存储
基本用法
#include <iostream> #include <list> using namespace std; /* clear() 清空链表 empty() 判断list是否为空 size() 获取list中的元素个数 pop_back() 删除最后一个元素(效率高) pop_front() 删除第一个元素(效率高) push_back() 在list的末尾添加一个元素(效率高) push_front() 在list的头部添加一个元素(效率高) erase() 删除指定元素 sort() 排序 reverse() 反转 */ int main() { list<int> l; l.push_back(1); l.push_back(4); l.push_front(3); l.push_front(2); cout << "size : " << l.size() << endl; l.sort(); // 特有排序接口 reverse(l.begin(), l.end()); // 4 3 2 1 for(list<int>::iterator it = l.begin(); it != l.end(); ++it) { cout << *it << ends; } cout << endl; l.clear(); cout << "size : " << l.size() << endl; return 0; }
循环删除(类似vector)
#include <iostream> #include <list> using namespace std; int main() { list<int> l; l.push_back(1); l.push_back(4); l.push_front(3); l.push_front(2); // 循环删除 for(list<int>::iterator it = l.begin(); it != l.end();) { if(*it == 4) { it = l.erase(it); } else { ++it; } } // 2 3 1 for(list<int>::iterator it = l.begin(); it != l.end(); ++it) { cout << *it <<ends; } cout << endl; return 0; }
以上是关于为啥说传vector的效率很低????的主要内容,如果未能解决你的问题,请参考以下文章