vector 这个我们最熟悉了,也可能是我们用的最多的容器之一了。

  我们可以用vector来模拟栈,vector的push_back和pop_back效率很高,时间复杂度是常数。

  由于他是一个连续的内存区域,所以他能够随机访问容器中的人一个元素且时间复杂度也是常数。

  但是vector是一个不能够自动“减肥”的容器。比如一开始你在push_back很多元素后,然后再某一个时间点释放点这些元素,虽然vector的size为0,但是vector的capacity却始终很大,这一点和浪费空间。在一些对时间和空间要求比较高的情况下,vector的push_back和pop_back以及它的随机访问能力很强,但是它在空间利用方面却不是很理想。

比如我们想要一个vector的利用率达到50%。我们可以这样做:

  if(vec.size()  < vec.capacity()  >> 1 ) {

      vector<int> vectmp(vec);

      vectmp.swap(vec);

}

其实vector对插入(非尾部)和删除(earse)是很费效率的,一般情况下不要对vector进行插入和删除操作,对vector的插入/删除都会引起vector内部插入点以后的元素整体向后/向前移动。对vector的insert/earse会引起除begin和end(不能访问到)之外的iterator失效,所以最好不要在循环一个vector的时候删除vector里边的元素,否则迭代器会失效,那该怎么呢?可以使用下标访问。


list其实也是我们接触最多的之一,链表分为单向链表,双向链表,循环链表,在这里就不说他们之间的区别了,主要从效率方面。

  list的不足,它不像vector一样拥有连续的存储空间,所以它不能实现随机访问,要想访问也可以必须一个一个的去寻找。

        它相对vector拥有额外的开销就是指向前一个和后一个的指针。

但是list也有自身的好处,它对随机插入删除的效率可比vector高很多,他的插入删除的时间复杂度为常数。

              他的空间利用率也很高,特别是存储大对象,他不想vector,他删除一个元素就删除该元素的实际空间。


  queue是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
  在队列的前边和后边进行查如何删除操作时间复杂度均为常数项,常常我们可以看到有时候用双向队列模仿缓冲区。有点类似与BOOST库中的circular_buffer。关于BOOST库中的circular_buffer可以参照http://www.cnblogs.com/hailong88/p/3293447.html

vector,list.queue,array.....的更多相关文章

  1. C++关于vector、queue、stack、priority_queue的元素访问

    vector.queue.stack.priority_queue对元素进行元素访问时,返回的是对应元素的引用.

  2. java三篇博客转载 详解-vector,stack,queue,deque

    博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...

  3. STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map

      list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [uno ...

  4. vector, map, queue,set常用总结

    #include<bits/stdc++.h> using namespace std; vector<,); 定义一个大小为9,初始化全是1的vector数组 set<int ...

  5. How to copy the contents of std::vector to c-style static array,safely?

    [问题] I am getting warning when using the std copy function. I have a byte array that I declare. byte ...

  6. vector以及array和数组

    //比较数组.vector.array #include <iostream> #include <vector> #include <array> #includ ...

  7. 【译】Rust中的array、vector和slice

    原文链接:https://hashrust.com/blog/arrays-vectors-and-slices-in-rust/ 原文标题:Arrays, vectors and slices in ...

  8. [codeforces 360]A. Levko and Array Recovery

    [codeforces 360]A. Levko and Array Recovery 试题描述 Levko loves array a1, a2, ... , an, consisting of i ...

  9. codeforces 86D : Powerful array

    Description An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary su ...

随机推荐

  1. API网关Kong部署和使用文档

    KONG安装使用说明 系统版本:ubuntu14 1.下载安装包 $ wget https://github.com/Mashape/kong/releases/download/0.8.3/kong ...

  2. centos7上安装docker-ce社区版

    报错:Error: docker-ce-selinux conflicts with 2:container-selinux-2.12-2.gite7096ce.el7.noarch 转载:http: ...

  3. Installing Jenkins to Centos Docker

    1.Install Docker CE to Centos7 [root@zoo1 ~]# yum install -y yum-utils device-mapper-persistent-data ...

  4. windows远程桌面访问ubuntu12.04

    转载自 : http://blog.csdn.net/shuzui1985/article/details/7592569 1.dashboard----桌面共享 我们共享所使用的协议是rdp,所以我 ...

  5. 转:增强学习(二)----- 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是 ...

  6. 着色方案(bzoj 1079)

    Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木 ...

  7. PCIe 调试

    ISE 生成PCIe核之后, 在ipcore_dir目录下会产生以下文件目录 目录下包含内容如下: The doc folder contains the PCIe Endpoint Block da ...

  8. bzoj 2039 最小割模型

    比较明显的网络流最小割模型,对于这种模型我们需要先求获利的和,然后减去代价即可. 我们对于第i个人来说, 如果选他,会耗费A[I]的代价,那么(source,i,a[i])代表选他之后的代价,如果不选 ...

  9. bzoj 2659 几何

    首先考虑(0, 0)到(p, q)这条直线. y = q / p * x. sum{k = 0 to (p - 1) / 2} [q / p * k] 就是直线下方的点数.sum{k = 0 to ( ...

  10. python3 闭包函数,装饰器

    闭包函数: 1.定义在函数内部的函数 2.包含对外部作用域而非全局作用域的引用特点: 1.自带作用域 2.延迟计算(取到内存地址,加括号执行) def 外部函数(func): def 内部函数(*ar ...