模板类vector和迭代器iterate是标准模板库STL中的容器和迭代器两部分内容(STL:提供了一组表示容器、迭代器、函数对象、算法的模板),容器相当于数组,存储了所有typename中的对象;而迭代器相当于一个自动类型推断指针,该指针可以遍历容器内的所有对象。下面将总结一个用迭代器遍历容器的典型用法和对容器所有对象进行简单升序排序。
1.1基于自动类型推断auto和容器起始vector::begin()和结束位置vector::end()遍历
vector<int> Vector(3);
for (auto iter = Vector.begin(); iter != Vector.end(); iter++)
cout << *iter << endl;
完整代码示例如下:
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
void main()
{
vector<int> Vector(3);
Vector.at(0) = 1; //初始化容器内容
Vector.at(1) = 2;
Vector.at(2) = 3;
Vector.push_back(10); //栈底添加内容
//用迭代器遍历整个容器,也可以用下面的自动类型推断关键字auto替换vector<int>::iterator
for (vector<int>::iterator iter = Vector.begin(); iter != Vector.end(); iter++)
{
cout << *iter << "\tVector.size()==" << Vector.size() << endl;
}
//for (auto iter = Vector.begin(); iter != Vector.end(); iter++)
//{
// cout << *iter << "\tVector.size()==" << Vector.size() << endl;
//}
system("pause");
return;
}
上述容器遍历的范围是[Vector.begin(),Vector.end()),注意左边中括号[是包含,右边小括号)是不包含。
Vector.begin():指向容器的第一个对象;
Vector.end():指向容器最后一个对象的后一个结束标志end,不包括最后一个对象。
1.2也可以用基于范围的for循环遍历
基于范围的for循环是为用于STL而设计的,可以修改容器内容(for_each()遍历不可以),一般遍历容器也可以用这种方式,典型遍历代码如下所示:
vector<int> Vector(3);
for (auto iter:Vector)
{
cout << iter << endl;
}
完整代码示例如下:
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
void main()
{
vector<int> Vector(3);
Vector.at(0) = 5; //初始化容器内容
Vector.at(1) = 2;
Vector.at(2) = 3;
Vector.push_back(10); //栈底添加内容
for (auto iter:Vector)
cout << iter << "\tVector.size()==" << Vector.size() << "\tVector.capacity()==" << Vector.capacity() << endl;
system("pause");
return;
}
1.3函数for_each()遍历容器
函数for_each()遍历容器好处之一是可以不显示支出迭代器,而且不能修改容器内容(基于范围for循环可以),是算法algorithm.h头文件里面的函数,一般跟排序算法函数sort()等一起用,代码如下所示(不包括sort()排序用法)
vector<int> Vector(3);
bool Function(const int &a)
{
cout << "a=" << a << endl;
return true;
}
for_each(Vector.begin(), Vector.end(), Function);
完整代码示例如下:
#include <iostream>
#include <vector>
#include <algorithm>
using std::cout;
using std::endl;
using std::vector;
using std::for_each;
bool Function(const int &a)
{
cout << "a=" << a << endl;
return true;
}
void main()
{
vector<int> Vector(3);
Vector.at(0) = 5; //初始化容器内容
Vector.at(1) = 2;
Vector.at(2) = 3;
Vector.push_back(10); //栈底添加内容
//for_each()函数遍历,每次都调用函数Function和传递一个遍历的参数
for_each(Vector.begin(), Vector.end(), Function);
system("pause");
return;
}
1.4算法函数sort()用法
sort()是算法algorithm.h头文件的函数,可以对容器所有对象进行升序排序,用法示例如下
#include <iostream>
#include <vector>
#include <algorithm>
using std::cout;
using std::endl;
using std::vector;
using std::for_each;
using std::sort;
bool Function(const int &a)
{
cout << "a=" << a << endl;
return true;
}
void main()
{
vector<int> Vector(3);
Vector.at(0) = 5; //初始化容器内容
Vector.at(1) = 2;
Vector.at(2) = 3;
Vector.push_back(10); //栈底添加内容
sort(Vector.begin(), Vector.end()); //对容器对象的值按升序排序
for_each(Vector.begin(), Vector.end(), Function);
system("pause");
return;
}
参考内容:
《C++ Primer Plus》(第6版)中文版 674-684页(参考:标准模板库)
https://www.cnblogs.com/yejianfei/archive/2012/10/19/2731337.html(参考:声明algorithm.h头文件)