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. [转]SQL的主键和外键约束

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  2. 【数组】Next Permutation

    题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...

  3. getCurrentSession 与 openSession() 的区别

    1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...

  4. 图解-安卓中调用OpenGL

    游戏开发中经常使用到OpenGL,当然很多人都喜欢直接用现有的游戏引擎,但相信了解的更多对你没有坏处 安卓开发中,采用的OpenGL ex2的规范,前几天看了下这个规范,整体上难度比1.0规范难度加大 ...

  5. es6中let,const区别与其用法

    ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScri ...

  6. 启动mongodb和redis服务器

    一.mongodb sudo service mongod start sudo service mongod restart sudo service mongod stop 二.redis red ...

  7. GRU

    GRU模型(比LSTM减少了计算量) LSTM的模型,LSTM的重复网络模块的结构很复杂,它实现了三个门计算,即遗忘门.输入门和输出门. 而GRU模型如下,它只有两个门了,分别为更新门和重置门,即图中 ...

  8. 转载《浅析MVC框架中View层的优雅设计及实例》

    在基于B/S的应用程序开发中,从基本的技术分工上来说就是两大块,一是软件显示界面,另一个是程序逻辑.在N年前的脚本语言时代,无论是asp.php还是jsp,我们基本是都是把这两者柔和在一起的.尽管我们 ...

  9. JavaScript 常用的小功能集合

    1. 得到当前用户使用的浏览器的内核版本 function getExplorer(){ var browser = ""; var explorer = window.navig ...

  10. java课件运行实践

    两数相加 源文件:Addition.java 源代码: // An addition program import javax.swing.JOptionPane;  // import class ...