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. 文件格式转换神器-pandoc

    By francis_hao    Mar 11,2017 介绍 如果你需要在各种类型的文件中穿梭,那么你需要这把瑞士军刀-pandoc 它可以将各种常见的不常见的文件类型转换成另一种,我感兴趣的是在 ...

  2. NodeJS概述

    NodeJS中文API 一.概述 Node.js 是一种建立在Google Chrome’s v8 engine上的 non-blocking (非阻塞), event-driven (基于事件的) ...

  3. MyBatis对象关联关系---- association与collection

    Mybatis处理“一对多”的关系时,需要用到associasion元素.处理”多对一“用collection元素来实现(这两个元素在之前mapper文件中提到过). 本例子中,假设一名User可以有 ...

  4. Bzoj1692 洛谷P2870 [Usaco2007 Dec]队列变换

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1570  Solved: 656 Description FJ打算带他的N(1 <= N <= ...

  5. 【Atcoder】AGC 016 C - +/- Rectangle

    [题意]给定大矩阵的边长H和W,给每格填数(<=|10^9|),要求大矩形总和为正数,而每个h*w的小矩形总和为负数,求构造方式. [算法]数学 [题解]结论题. ★当h|H&& ...

  6. BZOJ 1598 牛跑步

    牛跑步 [问题描述] BESSIE准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘, 然后走回牛棚. BESSIE也不想跑得太远,所以她想走最短的路经. 农场上一共有M ...

  7. 【洛谷 P4342】[IOI1998]Polygon(DP)

    题目链接 题意不再赘述. 这题和合并石子很类似,但是多了个乘法,而乘法是不满足"大大得大"的,因为两个非常小的负数乘起来也会很大,一个负数乘一个很大的整数会很小,所以我们需要添加一 ...

  8. winds dlib人脸检测与识别库

    在人脸检测与人脸识别库中dlib库所谓是非常好的了.检测效果非常ok,下面我们来了解一下这个神奇的库吧! 第一步我们首先学会安装:dlib ,winds+pytho3.6.5  Windows不支持p ...

  9. [Leetcode Week4]H-Index

    H-Index题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/h-index/description/ Description Given an arr ...

  10. C#后台调用js方法无效果,未解决。

    this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "<script> ...