STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式。即在索引可以在常数时间内完成。缺点是在插入或者删除一项时,需要线性时间。但是在尾部插入或者删除,是常数时间的。

STL的 list 是双向链表:如果知道位置,在其中进行插入和删除操作时,是常数时间的。索引则需要线性时间(和单链表一样)。

以下是vector和list中常用的方法:

int size() const  ;  返回容器内所有元素的个数。

void  clear()  ;    删除容器中所有元素。

bool  empty() ;    判断容器是否为空,如是,则返回true,否则返回false。

vector 和 list 都支持在常量的时间内在容器的末尾添加或者删除项,vector和list都支持在常量的时间内访问表的前端的项,操作如下:

void push_back( const Object & x)  ; 在容器的末尾添加x。

void pop_back() ; 删除容器的末尾对象。

const  Object & back() const ; 返回表的末尾的对象。

const Object & front() const ; 返回表的前端的对象。

list(双向链表) 中独有的方法,可以在容器的前端进行改变:

void push_back(const Object & x) ; 在list的前端添加x。

void pop_front() ;在list前端删除对象。

vector 中独有的高效索引方法:

Object & operator[ ] (int idx)  ,使用[ ]索引某个位置的元素,不包含边界检测。

Object & at (int idx) , 返回vector中idx索引位置的对象,包含边界检测。

int capacity( ) const ; 返回vector 内部的容量。

void reserve(int new Capacity): 设定vector的新容量,如果有对vector容量的良好估计,可以避免对vector扩展。

STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式。即在索引可以在常数时间内完成。缺点是在插入或者删除一项时,需要线性时间。但是在尾部插入或者删除,是常数时间的。

STL的 list 是双向链表:如果知道位置,在其中进行插入和删除操作时,是常数时间的。索引则需要线性时间(和单链表一样)。

以下是vector和list中常用的方法:

int size() const  ;  返回容器内所有元素的个数。

void  clear()  ;    删除容器中所有元素。

bool  empty() ;    判断容器是否为空,如是,则返回true,否则返回false。

vector 和 list 都支持在常量的时间内在容器的末尾添加或者删除项,vector和list都支持在常量的时间内访问表的前端的项,操作如下:

void push_back( const Object & x)  ; 在容器的末尾添加x。

void pop_back() ; 删除容器的末尾对象。

const  Object & back() const ; 返回表的末尾的对象。

const Object & front() const ; 返回表的前端的对象。

list(双向链表) 中独有的方法,可以在容器的前端进行改变:

void push_back(const Object & x) ; 在list的前端添加x。

void pop_front() ;在list前端删除对象。

vector 中独有的高效索引方法:

Object & operator[ ] (int idx)  ,使用[ ]索引某个位置的元素,不包含边界检测。

Object & at (int idx) , 返回vector中idx索引位置的对象,包含边界检测。

int capacity( ) const ; 返回vector 内部的容量。

void reserve(int new Capacity): 设定vector的新容量,如果有对vector容量的良好估计,可以避免对vector扩展。

 #include <vector>
#include <list>
#include <iostream> using namespace std; int main()
{
vector<int> v1(,); // 创建一个大小为 10的vector,初始化所有元素为 22
list<int> l1;
for(int i = ; i < ; i++) // 创建并初始化一个list
{
l1.push_back(i);
} // 打印 v1 和 l1 的大小
cout<<"The size of v1: "<<v1.size()<<", "<<"the size of l1: "<<l1.size()<<endl; //打印出 v1 cout<<"v1: ";
for (int i = ; i < v1.size(); i++)
{
cout<<v1[i]<<" ";
}
cout<<endl; // 打印出 l1
cout<<"l1: ";
for (list<int>::iterator iter = l1.begin(); iter != l1.end(); iter++)
{
cout<<*iter<<" ";
}
cout<<endl; // 在 v1 末尾添加一项,在 l1 末尾 和头部 各添加一项 v1.push_back();
l1.push_back();
l1.push_front(); // 打印v1 cout<<"v1: ";
for (int i = ; i < v1.size(); i++)
{
cout<<v1[i]<<" ";
}
cout<<endl; // 打印出 l1
cout<<"l1: ";
for (list<int>::iterator iter = l1.begin(); iter != l1.end(); iter++)
{
cout<<*iter<<" ";
}
cout<<endl; // 使用 at 访问 v1 中的元素,如果超出下标范围,会报错。 cout<<"v1.at(10): "<<v1.at()<<endl; // 返回v1 的capacity
cout<<"v1.capacity(): "<<v1.capacity()<<endl; // 使用 reserve 改变 v1 容量
v1.reserve();
cout<<"After reserve ,v1.capacity(): "<<v1.capacity()<<endl;
return ;
}

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

  1. C++的STL中vector内存分配方法的简单探索

    STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio ...

  2. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

  3. 【转】STL中vector、list、deque和map的区别

    1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...

  4. C++ STL中vector(向量容器)使用简单介绍

    原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...

  5. STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase

    今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0         这个程序使用了vect ...

  6. [转]STL中vector转数组(实际是数组的指针)

    感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.ht ...

  7. C/C++知识要点2——STL中Vector、Map、Set容器的实现原理

    1.Vector是顺序容器.是一个动态数组.支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自己主动分配空间.添加为原来的两倍.vector随机存取效率高,可是在v ...

  8. STL中vector容器实现反转(reverse)

    vector容器中实现可以通过以下两种方式实现: #include "stdafx.h" #include <vector> #include <iostream ...

  9. STL中vector,Map,Set的实现原理

    vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元 ...

随机推荐

  1. 弱网测试--使用fiddler进行弱网测试

    弱网测试原理以及方法(一) 一.为什么要进行弱网测试? 按照移动特性,各种网络连接协议不同,导致通信的信号不同,速率也不同,影响应用的加载时间.可用性.稳定性 二.什么样的网络属于弱网? 低于2g速率 ...

  2. 前端通信:ajax设计方案(四)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组

    马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...

  3. 运维甩锅神器---Jumpserver

    简介jumpserver 也就是跳板机,堡垒机,主要用于免密钥登陆web终端,可以对所有操作进行记录,录像!对所有服务器进行资产管理, 给开发人员分配登陆主机的权限和sudo权限,为运维人员省了很多手 ...

  4. java学习-struts基础(一)

    struts发展 struts是Apache软件基金会赞助的一个开源项目,是一个基于Java EE的MVC开源实现. 它为Servlet/JSP技术的应用提供技术框架2001.7--Struts1正式 ...

  5. LDA Gibbs Smapling理解

    即排除当前词的主题分配,根据其他词的主题分配和观察到的单词来计算当前词主题的概率公式 里面用到了伽马函数的性质 当Gibbs sampling 收敛后,我们需要根据最后文档集中所有单词的主题分配来计算 ...

  6. HTML引入CSS样式的四种方法

    在HTML中引入CSS的方法主要有四种,它们分别是行内式.内嵌式.链接式和导入式. 1.行内式          行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐 ...

  7. urlrewriteFilter condition----reference

    src:http://tuckey.org/urlrewrite/manual/2.6/ <condition> element An element that lets you choo ...

  8. Struts2 Web Project 实现中文、英语的切换

    1.struts.xml文件部分配置: <package name="default" namespace="/login" extends=" ...

  9. 2019.2.1 现有vue-cli项目引入ESLint

    ESLint 不管是多人合作还是个人项目,代码规范是很重要的.这样做不仅可以很大程度地避免基本语法错误,也保证了代码的可读性. 可能在早期建立项目的时候,因为一些原因没有引入eslint.单元测试等, ...

  10. Python urllib简单使用

    Python的urllib和urllib2模块都做与请求URL相关的操作. 它们最显著的差异为: urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urll ...