容器:
能容纳两个或更多个值的数据结构通常称为容器(container),因此数组是c++唯一直接支持的容器,但数组并不适合用来解决所有的问题.
而之前介绍过的基于模板的Stack类就是一种新容器.在C++标准库里有许多现成的容器.解决一个问题,找到最合适的容器只是编程工作的一部分.还需要一些适当的函数(算法)来处理这个容器里的数据才能实现最优效率.
向量容器
数组这种数据结构最大的先天不足就是它受限于一个固定的长度,c++标准库提供的向量(vector)类型从根本上解决了数组先天不足的问题,就像创建各种不同类型的数组一样,我们也可以创建各种不同类型的向量.
std::vector<type> vectorName;
我们用不着对一个向量能容纳多少个元素做出限定,因为向量可以动态地随着你往它里面添加元素而无限增大(前提是有足够可用的内存),然后你还可以用它的size()方法查知某给定向量的当前长度(它当前包含的元素个数),定义一个向量后,我们可以用push_back()方法往它里边添加东西.我们还可以用访问数组元素的语法来访问某给定向量里的各个元素.
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> name;
name.push_back("小甲鱼");
name.push_back("小鱿鱼");
for(int i=0; i<name.size(); i++)
{
std::cout << name[i] << "\n";
}
return 0;
}
拓展知识:
数组与vector的异同点
1、相同点
(1)都采用顺序存储的方式,可以存储任何类型的元素;
(2)在访问元素时,二者都是既可以通过下标访问,又可以通过迭代器来访问,对于迭代器访问,C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器定义了一种迭代器类型,而只用少数容器支持下标操作访问容器元素。
2、不同点
(1)是否动态分配空间:数组是分配了固定长的空间,不可存储多余定义长度的元素。而vector的优越性在于,可以动态分配空间,vector长度不固定,可以任意增加,避免内存空间的浪费。
(2)vector可以通过size()函数来获取当前容器长度,而数组长度在定义的时候就已经确定。
(3)vector可以在末尾通过push_back()加入元素,而数组不可以在超出定义长度之外的部分加入元素。
vector的常见用法
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.begin 得到数组头的指针
4.end 得到数组的最后一个单元+1的指针
5.size 当前使用数据的大小
6.capacity 当前vector分配的大小
7.erase 删除指针指向的数据项
8.clear 清空当前的vector
9.empty 判断vector是否为空
10.sort(v.begin(),v.end()) 从小到大排序, sort 需要头文件 #include <algorithm>
11.reverse(v.begin(),v.end()) 从大到小排序