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. 实用的百度下载神奇-proxyee-down

    项目地址: https://github.com/monkeyWie/proxyee-down 一.下载适合你的版本 二.运行软件 三.安装证书 四.重启软件和浏览器(注意是浏览器不是客户端),就能看 ...

  2. springboot-19-整合dubbox

    springboot 整合dubbox 1, 没了,,, 2, 安装zookeeper 可见: http://www.cnblogs.com/wenbronk/p/6636926.html 2.1 下 ...

  3. vim shortcut

    1.vim ~/.vimrc 进入配置文件 如果不知道vimrc文件在哪,可使用 :scriptnames 来查看 set nu #行号 set tabstop=4 #一个tab为4个空格长度 set ...

  4. mysql2

    第三章   保证数据完整性 3.1 数据完整性的概述:实体完整性  域完整性  引用完整性  用户自定义完整性 3.2 数据完整性的实现   3.2.1 创建非空约束  (在定义列后加上  not n ...

  5. [转]ASP.NET MVC4中@model使用多个类型实例的方法

    本文转自:http://blog.csdn.net/hulihui/article/details/48199897 有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NE ...

  6. 【手记】解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题

    刚装好SSMS 17.1准备体验,弹出: 一番搜索,普遍办法都是安装VS2015独立shell.删除某个注册表项什么的,没用,首先这个shell我是装了的,然后也没有那个注册表项.我自己尝试过重装sh ...

  7. C#中深拷贝和浅拷贝

    一:概念 内存:用来存储程序信息的介质. 指针:指向一块内存区域,通过它可以访问该内存区域中储存的程序信息.(C#也是有指针的) 值类型:struct(整形.浮点型.decimal的内部实现都是str ...

  8. [Linux] Linux系统(用户管理)

    Linux中有三种用户 Root用户:超级管理员 系统用户:Linux运行某些程序所必需的用户,不建议修改 普通用户:一般修改这个 使用命令groupadd,添加用户组,参数:组名称 在文件/etc/ ...

  9. Unity3d之MonoBehavior自带方法的执行顺序

    首先贴一张图(从其他地方摘录的,不记得出处,如果有小伙伴知道可以评论留言) 看了以后脑子有个大概的概念,可还是一知半解的感觉(接触Unity也有2年之久,却从来没想过弄清楚心中这团迷雾,总是囫囵吞枣用 ...

  10. Hackerrank GCD Product(莫比乌斯反演)

    题意 题目链接 Sol 一道咕咕咕了好长时间的题 题解可以看这里 #include<bits/stdc++.h> #define LL long long using namespace ...