一、容器
1、容器的理解:容器在日常生活中使用来存放东西的,在c++中容器同样使用来存放东西的,它存放的是数据,这个数据可以是普通数据类型,也可以是抽象数据类型。
2、容器的含义:容器是一个类模板,要求包含的数据类型相同。3、常用容器:数组是最常见的固定数据长度的容器,链表也是常见的不固定长度的容器,c++定义了一个vector容器,使用时需要包含vector头文件
4、容器的使用:vector容器提供了一些容器的操作和定义,使用者在使用时无需自己动手设计容器。使用时只需指定vector的数据类型,并对模板类实例化即可。
5、容器的初始化:vector<typename>a; //创建一个空的vector
vector<typename>a(b); //用b拷贝a,类比累的构造函数可以使用另一个类初始化
vector<typename>a(n); //含有n个数据的容器,数值缺省为零
vector<typename>a(n,elem); //创建一个含有n个elem拷贝的容器
vector<typename>a(beg,end);//创建一个以[beg,end)区间的容器
a~ vector<typename>;
6、vector容器函数:
a.assign(beg,end) //赋值
a.assign(n,elem)
a.at(idx) //返回索引值
a.back() //返回最后一个值
a.begin() //返回第一个数据指针
a.capacity() //返回容量
a.clear() //清除数据,不销毁内存
a.empty() //判断是否为空
a.end() //返回尾部数据指针,指向尾部数据的下一个
a.erase(pos) //删除pos位置的数据,传回下一个数据的位置
a.erase(beg,end) //删除区间[beg,end)数据,传回下一个数据位置
a.front() //传回第一个数据
get_allocator //使用构造函数返回一个拷贝
a.insert(pos,elem) //在pos位置插入elem拷贝,传回新数据位置
a.insert(pos,n,elem) //插入n个数据,无返回值
a.insert(pos,beg,end) //在pos位置插入区间数据,无返回值
a.max_size() //返回容器最大数据的数量
a.pop_back() //删除最后一个数据
a.push_back() //在尾部加入一个数据
a.rbegin() //传回一个逆向队列的第一个数据
a.rend() //传回一个逆向队列的最后一个数据的下一个位置
a.resize(num) //重新指定队列长队
a.reserve() //保留适当的容量
a.size() //返回容器中实际数据的个数
a1.swap(a2) //元素交换
注意:vector<>sizetype 是unsigned型的
二、迭代器
1、定义:迭代器是一个特殊的指针,它指向容器中的一个数据元素,这个数据元素可以是基本数据类型,也可以是抽象数据类型。当迭代器加1时,即指向下一个数据元素。
2、意义:使用迭代器不必编程者人为计算需要跳转的地址,将一个抽象的数据类型看成一个整体,较为直观形象,出错率低
3、迭代器的使用:vector<typename>::iterator ite;
三、示例
#include<iostream>
#include<vector>
using namespace std;
void main()
{
vector<int>test; //建立一个保存的数据类型为int的容器实例
vector<int>::iterator ite; //建立一个同类型的迭代器
for (int i = 0; i < 10; i++)
{
test.push_back(i+1); //初始化test容器
}
for (ite = test.begin(); ite != test.end();ite++) //注意test.end()指针指向最后一个数据地址的下一个地址
{
cout << *ite << endl; //用迭代器输出容器中的数值(迭代器是一个指针)
}
while (1);
}