STL中 vector 和 list 一些特性
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 一些特性的更多相关文章
- C++的STL中vector内存分配方法的简单探索
STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux CentOS 5.2 1.代码 #include <vector> #include <stdio ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
- C++ STL中vector(向量容器)使用简单介绍
原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...
- STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase
今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0 这个程序使用了vect ...
- [转]STL中vector转数组(实际是数组的指针)
感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.ht ...
- C/C++知识要点2——STL中Vector、Map、Set容器的实现原理
1.Vector是顺序容器.是一个动态数组.支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自己主动分配空间.添加为原来的两倍.vector随机存取效率高,可是在v ...
- STL中vector容器实现反转(reverse)
vector容器中实现可以通过以下两种方式实现: #include "stdafx.h" #include <vector> #include <iostream ...
- STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元 ...
随机推荐
- 2018春招-今日头条笔试题-第二题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 利用深度优先搜索 #-*- coding:utf-8 -*- class DFS: ''' num:用于存储最后执行次 ...
- Spring Security构建Rest服务-0702-短信验证码登录
先来看下 Spring Security密码登录大概流程,模拟这个流程,开发短信登录流程 1,密码登录请求发送给过滤器 UsernamePasswordAuthenticationFilter 2,过 ...
- postman—集成到jenkins
前言 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 将postman导出的脚本,持续集成到 ...
- ubuntu16.04 nginx安装
.gcc.g++依赖库 apt-get install build-essential apt-get install libtool .安装 pcre依赖库(http://www.pcre.org/ ...
- SpringMVC访问WEB-INF下的jsp的方法
当输入localhost:8080/项目名 浏览器弹出不知道神马错误 The absolute uri: http://java.sun.com/jsp/jstl/core cannot be res ...
- HMM分词实例
class HMM(object): def __init__(self): import os # 主要是用于存取算法中间结果,不用每次都训练模型 self.model_file = 'model/ ...
- InnoSetup打包时出现Interal error: CallSpawnServer: Unexpected response: $0.错误的解决办法
如果在使用Innosetup打包软件时,如果出现Interal error: CallSpawnServer: Unexpected response: $0.错误, 如下图: 可以查看 Innose ...
- HTTP状态码列表
经常用的http状态码 1xx消息——请求已被服务器接收,继续处理2xx成功——请求已成功被服务器接收.理解.并接受3xx重定向——需要后续操作才能完成这一请求4xx请求错误——请求含有词法错误或者无 ...
- golang基础--常量与运算符
常量与运算符 常量的定义 常量的值在编译时已经确定 常量的定义格式与变量的基本相同 等号的右侧必须是常量或者常量表达式 规范: 常量定义时建议都使用大写,单词之间使用大写 便于包的外部调用 如果只限于 ...
- Android自动化压力测试图解教程——Monkey工具 (转)
有时候我们需要对一个软件进行压力测试,检查该软件的性能.如果是人工进行测试的话,效率会低很多,而且会比较枯燥.这时,Android中的一个命令行工具Monkey就可以为我们减轻很多重复而又繁琐的工作. ...