STL之效率比較

1、vector

变长一维数组,连续存放的内存块,有保留内存。堆中分配内存;

支持[]操作,高效率的随机訪问;

在最后添加元素时,一般不须要分配内存空间,速度快;在中间或開始操作元素时要进行内存拷贝效率低;

vector高效的原因在于配置了比其所容纳的元素很多其它的内存,内存又一次配置会花非常多时间。

注:须要高效的随即存取,而不在乎插入和删除使用vector。

2、list

双向链表,内存空间上可能是不连续的,无保留内存。堆中分配内存;

不支持随机存取。開始和结尾元素的訪问时间快,其他元素都O(n)。

在不论什么位置安插和删除元素速度都比較快。安插和删除操作不会使其它元素的各个pointer。reference,iterator失效;

注:大量的插入和删除。而不关系随即存取使用list。

3、deque

双端队列,在堆上分配内存,一个堆保存几个元素。而堆之间使用指针连接;

支持[]操作,在首端和末端插入和删除元素比較快,在中部插入和删除则比較慢。像是list和vector的结合;

注:关心插入和删除并关心随即存取折中使用deque。

4、set&multiset

有序集合,使用平衡二叉树存储。依照给定的排序规则(默认按less排序)对set中的数据进行排序;

set中不同意有反复元素。multiset中执行有反复元素;

两者不支持直接存取元素的操作;

由于是自己主动排序,查找元素速度比較快。

不能直接改变元素值。否则会打乱原本正确的顺序,必须先下删除旧元素,再插入新的元素。

5、map&multimap

字典库,一个值映射成还有一个值。使用平衡二叉树存储,依照给定的排序规则对map中的key值进行排序。

map中的key值不同意反复,multimap中的key同意反复。

依据已知的key值查找元素比較快;

插入和删除操作比較慢。

时间: 2024-08-09 20:46:41

STL之效率比較的相关文章

STL之效率比较

1.vector 变长一维数组,连续存放的内存块,有保留内存,堆中分配内存: 支持[]操作,高效率的随机访问: 在最后增加元素时,一般不需要分配内存空间,速度快:在中间或开始操作元素时要进行内存拷贝效率低: vector高效的原因在于配置了比其所容纳的元素更多的内存,内存重新配置会花很多时间: 注:需要高效的随即存取,而不在乎插入和删除使用vector. 2.list 双向链表,内存空间上可能是不连续的,无保留内存,堆中分配内存: 不支持随机存取,开始和结尾元素的访问时间快,其它元素都O(n):

openCV 和GDI画线效率对照

一. 因为项目须要,原来用GDI做的画线的功能.新的项目中考虑到垮平台的问题.打算用openCV来实现.故此做个效率对照. 二. 2点做一条线,来測试效率. 用了相同的画板大小---256*256的大小,函数通过參数输入.用GetTickCount来实现计时功能. 三. GDI的主要循代码例如以下: void show_line(int line_num,int point_num) { ULONAG start_time = get_tick_count(); VMGdiPolygon* te

STL之deque容器的实现框架

说明:本文仅供学习交流,转载请标明出处,欢迎转载! vector底层采用的是一个数组来实现,list底层采用的是一个环形的双向链表实现,而deque则采用的是两者相结合,所谓结合,并不是两种数据结构的结合,而是某些性能上的结合.我们知道,vector支持随机访问,而list支持常量时间的删除,deque支持的是随机访问以及首尾元素的删除. deque是double ended queue的缩写,读作deck.首先我们用一个图来说明deque底层所采用的数据结构. 这个数据结构有一种似曾相识的感觉

STL之sort函数的用法

说明:本文仅供学习交流,转载请标明出处,欢迎转载! STL封装了一个排序算法,该算法相应的头文件为#include<algorithm>,我们能够依据须要对一个数组进行排序或者降序. sort的函数原型为: void sort(b,e,pre=up),表示对[b,e)的元素进行排序,第三个參数为一个谓词,我们能够自己定义排序方式,默认排序方式为升序排序. 详细实现代码例如以下: #include<iostream> #include<vector> #include&l

STL源码分析——sort排序

稍微花了一点点时间看了一下老师推荐的博客:http://feihu.me/blog/2014/sgi-std-sort/,看完后无不赞叹STL追求效率之极致,STL的sort排序算法综合了三种排序快排,堆排和插入排序,被称为Introspective Sort(内省式排序),在算法内部根据自身不同的情形来判断来使用不同的算法进行排序,sort算法可以说综合了三种排序算法的优点,追求效率到了极致. 一开始sort算法有两部分组成,__introsort_loop和__final_insertion

C++ Primer 学习笔记_41_STL实践与分析(15)--先来看看算法【下一个】

STL实践与分析 --初窥算法[下] 一.写容器元素的算法 一些算法写入元素值.在使用这些算法写元素时一定要当心.必须确保算法所写的序列至少足以存储要写入的元素. 1.写入输入序列的元素 写入到输入序列的算法本质上是安全的--仅仅会写入与指定输入范围数量同样的元素. 写入到输入序列的一个简单算法是fill函数: fill(iVec.begin(),iVec.end(),10); fill(iVec.begin(),iVec.begin()+iVec.size()/2,0); fill带有一对迭代

STL 容器具体解释

STL的容器能够分为下面几个大类: 一:序列容器, 有vector, list, deque, string. 二 : 关联容器,     有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap 三: 其它的杂项: stack, queue, valarray, bitset 容器类共享部分公共接口. 标准库定义的三种顺序容器类型:vector.list.deque(double-ended qu

HTTP

HTTP概述 HTTP协议规定.一定是client開始建立通信的,也就是说请求一定是从client发出.server端响应请求,server端在没有接收到请求的时候是不会有响应的. HTTP的请求报文由下面几部分构成: 方法 URI 协议版本号 POST /form/entry HTTP/1.1 请求首部字段 Host :baidu.com Connection:keep-alive Content-Type:application/-- Content-Length:16 请求实体 name=

多进程与多线程差别

 在Unix上编程採用多线程还是多进程的争执由来已久,这样的争执最常见到在C/S通讯中服务端并发技术 的选型上,比方WEBserver技术中.Apache是採用多进程的(perfork模式,每客户连接相应一个进程,每进程中仅仅存在唯一一个运行线程), Java的Web容器Tomcat.Websphere等都是多线程的(每客户连接相应一个线程,全部线程都在一个进程中). 从Unix发展历史看,伴随着Unix的诞生进程就出现了.而线程非常晚才被系统支持,比如Linux直到内核2.6.才支持符合P