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是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元 ...
随机推荐
- php 禁止谷歌蜘蛛抓取
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']); if (strpos($useragent, 'googlebot')){ exit(); ...
- Java虚拟机(六):JVM调优工具
工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题 ...
- GreenPlum:基于PostgreSQL的分布式关系型数据库
GreenPlum是一个底层是多台PostgreSQL分表分库的分布式数据库,它有如下特点 支持标准SQL,几乎所有PostgreSQL支持的SQL,greenplum都支持 支持ACID.分布式事务 ...
- java 之 异常处理小结
1 :分类 检查异常(checked,受检) 运行异常(unchecked) 2:捕获异常 try/catch try/catch/finally try/finally try{ //受保 ...
- springboots Helloworld
1.eclipse gradle 插件 HELP----MarketPlace----搜索 buildship点击安装 WINDOW----preferences--gradle 配置安装好的grad ...
- 【转】Java高并发,如何解决,什么方式解决
原文地址:https://www.cnblogs.com/lr393993507/p/5909804.html 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了. ...
- js遇到的问题
一些开发前台时遇到的小问题: ----------------------------------------- 一眼看出页面使用html还是html5: html有三种声明方式:<!DOCTY ...
- O(∩_∩)O~~
1.在一切ac的路上,所以的难题都是纸老虎. 2.加油吧,少年.
- php-fpm.conf 重要参数 max_children 和 request_terminate_timeout
php-fpm.conf 重要参数 max_children 和 request_terminate_timeout php-fpm.conf有两个至关重要的参数:一个是”max_children”, ...
- Java设计模式(三)单例模式
一.场景描述 在采集到仪器数据后,需要将数据发送到lims系统中,通过调用lims系统服务实现数据的上传. 在仪器数据采集组件中实现lims系统服务代理,该代理需要指定服务地址url,认证信息(用户名 ...