STL中 vector 和 list 一些特性】的更多相关文章

STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式.即在索引可以在常数时间内完成.缺点是在插入或者删除一项时,需要线性时间.但是在尾部插入或者删除,是常数时间的. STL的 list 是双向链表:如果知道位置,在其中进行插入和删除操作时,是常数时间的.索引则需要线性时间(和单链表一样). 以下是vector和list中常用的方法: int size() const  ;  返回容器内所有元素的个数. void  clear()  ;    删除容器中所有元素.…
STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio.h> using namespace std; int main() { vector<int> x_vec; printf("data size : [%3d], mem size : [%3d]\n", x_vec.size(), x_vec.capacity())…
1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉.通常此默认的内存分配能完成大部分情况下的存储.   优点:(1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组       …
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数返回的大小,当超过此分配的空间时,再整体重新分配一块内存存储,这给人以vector为一个连续内存的感觉.通常此默认的内存分配能完成大部分情况下的存储. 优点: (1)不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数字进行动态操作. (2)随机访问方便,即支持[ ]操作符和vec…
原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组,或者作为动态内存.   在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即c…
今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0         这个程序使用了vector的两种赋值方式,遍历,查找,删除,自定义排序.希望对看到此文的同学有所帮助.        另外,一定要引如using namespace std; 否则后面老是要写std::vector<int> 很麻烦的.        assert.h不是必须的,这里只不过用了一下而已,它是和asser…
感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.html 不过那边是转载自<effective stl>. std::vector很方便,但有时调用的函数的参数规定是数组,需要将vector转为数组,另外开辟一个空间,将vector一项项复制过去代价过大,可用下面的方法. 给定一个 vector<int>   v;         表达…
1.Vector是顺序容器.是一个动态数组.支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自己主动分配空间.添加为原来的两倍.vector随机存取效率高,可是在vector插入元素.须要移动的数目多.效率低下. 注意:vector动态添加大小时.并非在原空间之后持续新空间(由于无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来.然后才開始在原内容之后构造新元素,并释放原空间. 因此.对vector的不论什么…
vector容器中实现可以通过以下两种方式实现: #include "stdafx.h" #include <vector> #include <iostream> //#include <math.h> #include <algorithm> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<int> arrayInt; arrayInt.…
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统.但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块头的array了,我们可以安心使用vector,随便使用多…
以前基本上没有用过STL,当然包括里面的vector.今天试验了一下. 主要看了这个网址: http://blog.csdn.net/phoebin/article/details/3864590 代码很简单,就不贴了.也没使用到多少函数,主要使用的就是push_back.size.at这三个.然后想到了清空内存,网上的说法都是: vector <T>().swap(variable); 不是很明白的有如下点: 1. 为何没有使用 variable.~vector<T>(); 这个…
#include<iostream> #include<cstdio> #include<string> #include<vector>//不定长数组(向量)所需要包含的头文件 using namespace std; ; int n; ]={,,,,}; /*不定长数组的声明方法*/ vector <int> pile; //vector<T> v1 vector保存类型为T的对象.默认构造函数,v1为空 vector <i…
 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码: #include <vector> vector属于std命名域的,因此需要通过命名限定,如下完成你的代码: using std::vector;     vector<…
最近,同期的一位大佬给我出了一道题目,改编自 洛谷 P2783 有机化学之神偶尔会做作弊 这道题好坑啊,普通链表过不了,只能用vector来存边.可能更快一些吧? 所以,我想记录并分享一下vector怎么实现邻接表. I:存边 通常我们用的链表结构需要自己打一个add函数 int cnt,head[maxn]; struct edge { int next,to,cost; } e[maxn]; void add(int a,int b,int c) { e[++cnt].to=b;e[cnt]…
vector的初始化有很多方式,在N维初始化时还会一些容易出现错误的地方.下面进行总结 以下的总结均以int作为模板参数 一维vector的初始化 vector的构造函数通常来说有五种,如下: vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t vector(const vector&):复制构造函数 vec…
list封装了链表,vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[].vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快.list对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以了.另外对于新添加的元素,vector有一套算法,而list可以任意加入. map,se…
vecotr是动态数组,顾名思义他可以动态的增加自己的长度. 内存机制: 但是怎样的增加自己的长度? vector有两个函数一个是capacity()返回内存空间即缓冲区的大小,另一个是size()返回当前数组中数的数量.vector增加元素来说,当容量已经不能放进数据了,那么他会重新申请一块内存,把之前的内存利用复制构造函数复制到新的内存当中,然后把新添加的内容放入后面,另外此时的他申请的内存空间是原来空间的2倍,我测得是2倍 缓冲区的释放 vecotor占用的内存只增不减,erase只是将一…
()使用vector之前必须包含头文件<vector>:#include<vector> ()namespace std{ template <class T, class Allocator = allocator<T> > class vector; } vector的元素可以是任意类型T,但必须具备assignable和copyable两个性质.第二个template参数可有可无,用来定义内存模型,缺省的模型是C++标准程序库提供的allocator.…
vector是标准模板库的一种容器,是可存放各种类型的动态数组. #include<iostream> #include<vector> using namespace std; void print(vector<int> numbers) { ; i < numbers.size(); ++i) cout<<numbers[i]<<endl; } int main() { vector<int> vInt; int tmp;…
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set>…
1.map 代码如下: /* * map_1.cpp * * Created on: 2013年8月6日 * Author: Administrator */ #include <iostream> #include <map> using namespace std; template <typename T> void print(T b , T e,char c = ' '){ while(b!= e){ cout<< *b++<<c; }…
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int>是一种数据类型. Vector的存储空间是连续的,list不是连续存储的. 1. 定义和初始化 vector< typeName > v1; //默认v1为空,故下面的赋值是错误的v1[0]=5;//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被…
C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内存增长 vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储.设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间.拷贝元素.撤销旧空间,这样性能…
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int main(){ int m, //行数     n; //列数 cout << "input value for m,n:"; cin>>m>>n;  //注意下面这一行:vector<int后两个">"之间要有空格!否则会被认…
[原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> using namespace std; int main() { vector<int> v; v.push_back(); v.push_back(); v.push_back(); v.push_back(); v.push_back(); ; i<v.size(); i++) { print…
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一…
/* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include <cstdlib> #define MAX 10000 using namespace std; struct EdgeNode{ //边表节点类型 int to, w; //顶点序号和边长 }; vector<EdgeNode> map[MAX]; int main(){ EdgeN…
参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第十章 认识两个容器:vector和list 容器:是STL(Standard Template Library 标准模板库)的六大组件之一.(容器,容器适配器,迭代器,算法,函数对象,函数适配器) 容器是用来存储和组织其他对象的对象.提供要存储的对象的类型就可以从STL模板中创建容器类. Vector <T>:表示一个在必要时刻可增加容量的数组,该数组存储T类型的元素.只能在矢量容器的末尾添加新元素. Vector…
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, class _Ax = allocator<_Ty> > class vector; 但在VC2008 中vector 还有基类,如下:  C++ Code  1 2 3 4 5 6 7   // TEMPLATE CLASS vector template < class _Ty,   …