一.基本概念:
1.容器:
容器用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型。
2.vector:
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
3.迭代器:
(1):迭代器类似于指针类型,它也提供了对对象的间接访问。
(2):指针是c语言中就有的东西,迭代器是c++中才有的,指针用起来灵活高效,迭代器功能更丰富些。
(3):迭代器提供一个对容器对象或者string对象的访问的方法,并且定义了容器范围。
(4) :迭代器是一种检查容器内元素并遍历元素的数据类型。C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。
具体内容请看文章:
4.vector和数组的区别:
数组是c++中类似vector的数据结构,它们都可以对一种类型进行储存,既都是容器。虽说两者有相似之处,但也有显著的区别,c++ primer的作者说到,在实际的编程中,我们作为程序员应该避免用到低级数组和指针,而更应该多用高级的vector和迭代器。两者的相同和区别如下:
数据结构 | Vector | 数组 |
相 同 | 都是对同一种类型的数据进行储存。 | |
都可以用下标操作进行处理 | ||
都可以用迭代器进行操作(在c++中每个容器都配有各自的迭代器) | ||
不 相 同 | 可以用size获取vector的长度 | 不可以获取,在定义时就已经确定了长度 |
长度不固定,可以随时增加 | 长度固定,在定义是就不可以更改 | |
可以在末尾增加vector的元素(用push_back) | 不能增加在长度以外的长度 | |
可以确定长度,节约空 间 | 不能确定长度,必须在定义时定义一个很大的空间留给数组,造成内存的浪费 |
二.vector容器的基本使用:
为了可以使用vector,必须在你的头文件中包含下面的代码:
#include <vector>
using namespace std;
vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:
using std::vector;
vector<int> vInts;
或者连在一起,使用全名:
std::vector<int> vInts;
三.vector容器常见函数操作:
常见函数的使用:
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
详细的函数实现功能:
其中vector<int> c.
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.erase(pos) 删除pos位置的数据
c.erase(beg,end) 删除[beg,end)区间的数据
c.front() 传回第一个数据。
c.insert(pos,elem) 在pos位置插入一个elem拷贝
c.pop_back() 删除最后一个数据。
c.push_back(elem) 在尾部加入一个数据。
c.resize(num) 重新设置该容器的大小
c.size() 回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的迭代器