在c++的标准模板库中有许多模板容器,他们封装了底层的数据结构,并且可以用来装几乎所有的已有数据类型以及用户自定义的数据类型。vector(向量)就是其中一个非常好用的序列式的容器。vector是最简单的序列容器,支持元素的随机访问,当然有时候显得效率低一些。
vector类基础
vector对象定义
vector对象定义之前需要使用std命名空间和vector这一个头文件。
1 |
|
上面就是定义了两个vector对象,一个是用来装int类型的数据,一个是用来装string类型的数据。
vector类对象初始化
vector对象的常用的初始化方法有以下几种:
1 | vector<T> v1 //v1是一个空vector,它潜在的元素是T类型的,执行默认初始化 |
vector对象在没有初始化之前不能够用赋值符号对其进行赋值,但是可以用push_back()成员函数对其赋值例如:
1 | vector<int> myIntVec; |
容器的大小和容量
vector类定义了size()和capacity()两个函数来实现对当前容器元素的个数统计和对容器当前分配的内存数量的统计,同时也提供了reserve()和resize()两个成员函数来预先设置容器的大小和修改容器的大小。
vector类的成员函数
1 | vector<int> myvec; |
遍历vector容器
遍历vector容器可以使用迭代器方式,也可以通过使用at()成员函数和循环语句实现:
1 | //迭代器加for循环来遍历vector对象 |
使用count_if
算法和for_each
算法操作vector对象
for_each
和count_if
算法在algorithm头文件中
1 |
|
vector高级主题
元素访问方法
可以直接访问vector对象的操作方法主要包括以下4中:
1 | vector<MyType> myvector; |
myvector[index]和myvector.at(index)两种访问方式返回的都是对象的引用类型,所以既可以取其中的元素,也可以对其赋值。前提是下标值必须有效。front()和back()分别返回第一个元素和最后一个元素。
迭代器相关函数
1 | vector<int> myvect={1,2,3,4,5}; |
元素查找和搜索
STL通用算法find()和find_if()
容器中元素的排序
sort算法:
1 |
|
上面程序的输出结果为:
1 | 排序前: |
插入元素
push_back()可以在vector对象的末尾插入元素,insert()函数可以在vector的任意位置插入元素。下面看演示:
1 |
|
输出结果:
1 | 1 2 3 4 5 6 7 |
删除元素
在vector删除元素可以使用3个成员函数:pop_back(),erase(),和clear().还可以使用算法库的算法remove()来实现。
1 |
|
输出:
1 | 1 2 3 4 5 6 7 |