前言
时不可以苟遇,道不可以虚行。
STL 中最常用的容器为:vector
,暂且把它理解为我们之前学过的数组Array
。
一、创建一个vector容器(数组)
- 添加头文件:
#include <vector>
vector<int> v;
二、向容器中插入数据
- 利用内置函数:
push_back()
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
三、通过迭代器访问容器中的数据
1、利用起始和结束两个迭代器
- 先声明两个迭代器,一个指向容器中的第一元素,一个指向容器中的最后一个元素的下一个位置
- 然后利用一层
while
循环,依次遍历容器中的元素。
vector<int>::iterator itBegin = v.begin(); //起始迭代器,指向容器中第一个元素
vector<int>::iterator itEnd = v.end(); //结束迭代器,指向容器中最后一个元素的下一个位置
while (itBegin != itEnd) {
cout << *itBegin << endl;
itBegin++;
}
2、直接使用 for 循环
- 使用
for
循环,定义一个临时的起始迭代器指向容器v
中第一个元素,当 该迭代器 指向位置到达容器 v 中的最后一个元素的下一个位置时,结束循环。
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << endl;
}
3、利用 for_each
遍历算法
- 需要添加头文件:
#include <algorithm>
,标准算法的头文件 - 创建一个打印函数作为这个算法的第三个函数参数
void myPrint(int val) {
cout << val << endl;
}
//最后一个参数为:传入函数名,回调作用
for_each(v.begin(), v.end(), myPrint);
- 跳转
for_each
函数的定义,其实现方法也是使用一层for
循环。
for_each(_InputIterator __first, _InputIterator __last, _Function __f)
{
// concept requirements
__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
__glibcxx_requires_valid_range(__first, __last);
for (; __first != __last; ++__first)
__f(*__first);
return __f; // N.B. [alg.foreach] says std::move(f) but it's redundant.
}