一,什么是容器?
数组,stack,queue,可以容纳一类资源称之为容器。
向量容器:
数组这种数据结构最大的先天不足就是他受限于一个固定的长度。
在程序中,数组的空间是固定的,不可以多,容易溢出或者出现溢出这种现象。
C++标准库提供的向量(vector)类型解决了先天不足的问题。
就像可以创建各种不同类型的数组一样,我们也可以创建各种不同类型的向量。
std::vector vectorName;
优点:
- 随着往容器添加元素而无限增大
- 用size()方法可查出当前长度
- 可以通过push_back()往其中添加东西
- 可以通过访问数组元素的语法来访问给定向量的各个元素
实例:
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> names;
names.push_back("Q");
names.push_back("W");
names.push_back("E");
names.push_back("R");
for(int i=0;i<names.size();i++)
{
std::cout<< "name["<<i<<"] = "<<names[i]<<"\n";
}
return 0;
}
运行结果:
name[0] = Q
name[1] = W
name[2] = E
name[3] = R
迭代器来源?
对容器个元素进行遍历是一种非常常见的任务,所以应该有一种标准的方式来做这件事,所以C++标准库提供的**迭代器(iterator)**就是为了解决上述问题得来。
基本操作:*,++,–, = 等
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> names;
names.push_back("Q");
names.push_back("W");
names.push_back("E");
names.push_back("R");
//用迭代器输出向量
std::vector<std::string>::iterator iter = names.begin();
while(iter != names.end()) //iter迭代器是特殊的指针
{
std::cout << *iter <<"\n";
iter++;
}
return 0;
}
运行结果:
Q
W
E
R