容器的简单介绍
来源:互联网 发布:mysql add user 编辑:程序博客网 时间:2024/06/05 05:28
容器是STL的基础,容器分2种:
序列式容器(sequential container)
关联式容器(associative container)
序列式容器会强调元素的次序,依次维护第一个元素、第二个元素……,直到最后一个元素,面向序列式容器的操作主要是迭代操作。
本节讨论序列式容器vector、list和deque的用法,以及序列式容器的共同操作。
使用序列式容器,须包含相关的头文件,vector、list及deque分别对应:
#include <vector>
#include <list>
#include <deque>
创建序列式容器的对象,大体有5种方式:
(1)创建空的容器,此时容器中的元素个数为0。
vector<int> obV;
list<float> obL;
deque<double> obD;
(2)vector<double> obV(10); //vector型对产生特定大小的容器,此时容器中的元素被创建,编译器使用默认值为元素隐式初始化,像int、float和double等内建的数据类型会被初始化为0,对于类对象元素,将调用其无参构造函数(用户定义的或编译器缺省提供的)或每个参数都有默认值的构造函数。象obV中含10个double型元素, 初始化为0
list<int> obL(20); //list型对象obL中含20个int型元素, 初始化为0
deque<float> obD(30); //deque型对象obD中含30个float型元素, 初始化为0
(3)在(2)的基础上更进一步,创建特定大小的容器,并且为其中的每个元素指定初始值,此时在元素多少的参数后增加一个参数。
vector<int> obV(10,8); //10个int型元素, 每个都初始化为8
list<double> obL(20,3.1); //20个double型元素, 每个都初始化为3.1
deque<string> obD(30,"Hello"); //30个string型元素, 每个都初始化为"Hello"
(4)根据已有同类型的容器创建新容器,并将其中的元素完全复制过来,设obV1、obL1和obD1都是现成的容器,里面存储的数据均为int型,则可用下述命令创建新容器
vector<int> obV2(obV1); //或vector<int> obV2=obV1;
list<int> obL2(obL1); //或list<int> obL2=obL1;
deque<int> obD2(obD1); //或deque<int> obD2=obD1;
(5)通过一对迭代器(可暂时理解为指针),以使编译器决定元素的个数和初值,这对迭代器用以标识一组元素区间。
int sz[5]={11,2,3,4,45};
vector<int> obV(sz, sz+5);
list<int> obL(sz, sz+5);
deque<int> obD(sz, sz+5);
vector和deque类的容器创建后就可以通过容器名[下标]或容器名.at(序号)的形式对元素进行随机访问(这是因为这2种类模板对下标运算符[]进行了重载);也支持迭代器访问。
但list类的容器不支持下标运算符[],无法使用[]对元素进行随机访问。但支持双向迭代器访问,如:
list<int>::iterator iter = obL.begin();
动手敲一敲的示例代码:
#include <iostream>#include<vector>#include<list>#include<deque>using namespace std;int main() {// Create an empty vectorvector<int> test1;cout << "test1的元素个数为:" << test1.size() << endl;//Create dequedouble sz[5] = { 1,2,3,4,5 };deque<double> test2(sz, sz + 5);for (int i = 0; i < test2.size(); i++) {cout << test2[i] << " ";}cout << endl;deque<double>::iterator id = test2.end();while (id != test2.begin()) {id--;//注意的是id指向的是最后一个元素的下一个迭代器cout << (*id) << " ";}cout << endl;//Create Listlist<float> test3(3, 5); //list不支持下标访问list<float>::iterator it = test3.begin();while (it != test3.end()) {(*it) += 2;cout << (*it) << " ";it++;}cout << endl;//再创建一个List容器,使其内容与test3内容进行交换list<float> test4(4, 9);test3.swap(test4);for (it = test3.begin(); it != test3.end(); it++) {cout << (*it) << " ";}cout << endl;system("pause");return 0;}
发现了一些写得比我更好的博客,我就不献丑了,下面式传送门:
点击打开链接
点击打开链接
阅读全文
0 0
- 容器的简单介绍
- IOC容器的简单介绍
- C++容器类的简单介绍
- C++容器类的简单介绍
- C++容器类的简单介绍
- 容器和泛型的简单介绍
- 简单介绍Java EE容器
- C++容器类的简单介绍(转帖)
- C++容器类的简单介绍续(转帖)
- Web 容器的介绍
- JAVA容器--简单介绍(1)
- java 集合 容器类 简单介绍
- Concurrent 与 CopyOnWrite 容器简单介绍
- 转载容器类的介绍
- java容器类的介绍
- 常用的web容器介绍
- tomcat-web容器的介绍
- 容器(Collection)的介绍
- 算法系列15天速成——第十天 栈
- 通过远程终端登录虚拟机提示被拒绝
- 基于WiFi的室内定位技术的感想
- 集合分页展示,补全最后一页
- 纪念日
- 容器的简单介绍
- Ubuntu之首次设置root密码
- C++程序设计案例实训教程第14章
- 深入理解 Linux 的 RCU 机制
- 【JZOJ 5438】【NOIP2017提高A组集训10.31】Tree
- android笔记-7.0App间共享文件
- Go基本类型
- 网关协议学习:CGI、FastCGI、WSGI
- python: bisect库