迭代器由来
- 在上节课虽然我们成功地使用了向量,但是我们还是把它按照数组的形式进行操作的,如果我们创建的容器不支持使用数组下标来进行操作的话,程序就很难运行。这就需要使用迭代器。
- 使用迭代器,当在程序里改用另一种容器的时候就不需要修改那么多的代码了。
迭代器
-
迭代器相当于是一个容器智能指针。
-
定义
std::vector <std::string>::inerator iter = names.begin(); //以容器类型为string类型,迭代器名称为 iter,容器名称为 names 为例。
-
names.begin()
-
names.end();
-
迭代器的价值体现在它可以和所有的容器配合使用:使用迭代去去访问
容器元素的算法可以和任何一种容器配合使用。
算法
- C++标准库里面有许多很好用的算法。要使用这个算法,只需要调用相关的库就可以了。
-
#include <algorithm> std::sort(beginIterator,endIterator); //以sort方法为例
代码实现
1/2 迭代器程序
#include <iostream>
#include <string>
#include <vector>
//迭代器iterator是个所谓的智能指针
int main()
{
std::vector<std::string> names;//定义一个字符串型的向量容器
names.push_back("小聪");//往里面添加东西
names.push_back("小笨");
std::vector<std::string>::iterator iter = names.begin();//定义迭代器iter为names的开始位置
//names.begin()调用的是names向量容器的第一个元素
while( iter != names.end())//names.ends()为names的结束位置
{
std::cout << *iter << "\n";//解引用,输出值
++iter;
}
std::cout << "size: "<<names.size() << std::endl;
return 0;
}
2/2 算法实现
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
//迭代器iterator是个所谓的智能指针
int main()
{
std::vector<std::string> names;//定义一个字符串型的向量容器
names.push_back("clearlove");//往里面添加东西
names.push_back("betty");
names.push_back("uzi");
names.push_back("deft");
names.push_back("meiko");
std::vector<std::string>::iterator iter = names.begin();//定义迭代器iter为names的开始位置
std::sort(names.begin(),names.end());
//names.begin()调用的是names向量容器的第一个元素
while( iter != names.end())//names.ends()为names的结束位置
{
std::cout << *iter << "\n";//解引用,输出值
++iter;
}
std::cout << "size: "<<names.size() << std::endl;
return 0;
}