vector,list.queue,array.....
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,他删除一个元素就删除该元素的实际空间。
vector,list.queue,array.....的更多相关文章
- C++关于vector、queue、stack、priority_queue的元素访问
vector.queue.stack.priority_queue对元素进行元素访问时,返回的是对应元素的引用.
- java三篇博客转载 详解-vector,stack,queue,deque
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...
- 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 ...
- vector, map, queue,set常用总结
#include<bits/stdc++.h> using namespace std; vector<,); 定义一个大小为9,初始化全是1的vector数组 set<int ...
- 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 ...
- vector以及array和数组
//比较数组.vector.array #include <iostream> #include <vector> #include <array> #includ ...
- 【译】Rust中的array、vector和slice
原文链接:https://hashrust.com/blog/arrays-vectors-and-slices-in-rust/ 原文标题:Arrays, vectors and slices in ...
- [codeforces 360]A. Levko and Array Recovery
[codeforces 360]A. Levko and Array Recovery 试题描述 Levko loves array a1, a2, ... , an, consisting of i ...
- codeforces 86D : Powerful array
Description An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary su ...
随机推荐
- 【题解】JLOI2013卡牌游戏
这题最开始是用 \(n^{4}\)的算法水过的,之后才想出的\(n^{3}\)正解.首先,\(n^{4}\) 应该是很容易想到的:设状态 \(f[i][j][k]\) 为有 \(i\) 个人,庄家为 ...
- P1641 [SCOI2010]生成字符串
P1641 [SCOI2010]生成字符串 题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不 ...
- SCU3037 Painting the Balls
Description Petya puts the \(N\) white balls in a line and now he wants to paint some of them in bla ...
- 2016广东工业大学校赛 E题 GDUT-oj1173
Problem E: 积木积水 Description 现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水.小明又是如此地喜欢二次元 ...
- tyvj1305 最大子序和(单调队列
题目地址:http://www.joyoi.cn/problem/tyvj-1305 最大子序和 题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Loc ...
- 关于UML
http://www.cnblogs.com/zfc2201/archive/2011/08/16/2141433.html
- 【洛谷 P3304】[SDOI2013]直径(树的直径)
题目链接 题意,求一棵树被所有直径经过的边的条数. 这题是我们8.25KS图论的最后一题,当时我果断打了暴力求所有直径然后树上差分统计的方法,好像有点小问题,boom0了. 考完改这题,改了好久,各种 ...
- Codeforces Round #469 Div. 2 A B C D E
A. Left-handers, Right-handers and Ambidexters 题意 \(l\)个左撇子,\(r\)个右撇子,\(a\)个两手均可.要组成一支队伍,里面用左手的人数与用右 ...
- algorithm ch2 Merge_sort
这是用分治法来对序列进行排序,将较长的一个序列分解为n个比较短的序列,然后分别处理这n个较小的段序列,最后合并.使用递归的来实现. 具体实现的代码如下: void MergeSort(int *A, ...
- 使用CloudSight API进行图像识别的Python脚本
# -*- coding: utf-8 -*- # @Time : 2018/03/20 17:02 # @Author : cxa # @File : sss.py # @Software: PyC ...