2、迭代器入门

STL中最常用的容器为Vector,可以理解为数组,下面我们在这个容器中插入数据、并遍历这个容器

容器:Vector

算法:for_each

迭代器:vector<int>::iterator

迭代方式1

#include<iostream>
#include<vector> //STL中的容器都有自己的头文件,如果要使用,需要包含

using namespace std;

int main(){
    //创建一个vector容器
    vector<int> v;
    //push_back(),尾插数据
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    //第一种遍历方式
    //通过迭代器访问vector中的元素
    vector<int>::iterator vcBegin = v.begin(); //起始迭代器,指向容器第一个元素
    vector<int>::iterator vcEnd = v.end(); //结束迭代器,指向容器最后一个元素下一个位置
    //如果起始迭代器,没有和结束迭代器指向同一个位置,那么就遍历、打印
    //正向遍历
    while (vcBegin != vcEnd){
        cout << *vcBegin << endl;
        vcBegin++;
    }
    //反向遍历
    //需要让起始迭代器回到初始位置
    vcBegin = v.begin();
    while (vcEnd != vcBegin){
        cout << *(vcEnd - 1) << endl;
        vcEnd--;
    }

    system("pause");
    return 0;
}

迭代方式2(推荐)

#include<iostream>
#include<vector> //STL中的容器都有自己的头文件,如果要使用,需要包含

using namespace std;

int main(){
    //创建一个vector容器
    vector<int> v;
    //push_back(),尾插数据
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    //第二种遍历方式、和上面的原理一样
    for(vector<int>::iterator b = v.begin();b != v.end();b++){
        cout << *b << endl;
    }

    system("pause");
    return 0;
}

迭代方式3

#include<iostream>
#include<vector> //STL中的容器都有自己的头文件,如果要使用,需要包含
#include<algorithm> //算法头文件

using namespace std;

//用于for_each()中的回调函数
void func(int val){
    cout << val << endl;
}

int main(){
    //创建一个vector容器
    vector<int> v;
    //push_back(),尾插数据
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    //第三种遍历方式,使用遍历算法for_each,必须包含算法头文件
    //for_each(起始迭代器,结束迭代器,回调函数)
    for_each(v.begin(),v.end(),func);

    system("pause");
    return 0;
}

存放自定义数据类型并迭代

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

class Person{
public:
    string name;
    int age;
    Person(string name,int age){
        this->name = name;
        this->age = age;
    }
};

void showPerson(Person p){
    cout << "姓名:" << p.name << "年龄:" << p.age << endl;
}

int main(){
    vector<Person> persons;
    persons.push_back(Person("lucy",12));
    persons.push_back(Person("tom",18));
    vector<int> v;

    for_each(persons.begin(),persons.end(),showPerson);

    system("pause");
    return 0;
}