zoukankan      html  css  js  c++  java
  • STL三大组件(容器、算法、迭代器)初始及区分*it和it

    容器 vector

    算法 for_each 头  algorithm

    迭代器  iterator  每个容器有专属迭代器

    • vector<int >v 
    • vector<int>::iterator  it = …..
    • v.begin() 指向第一个数据
    • v.end 指向 最后一个数据的下一个地址
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    //迭代器 遍历功能 用指针来理解
    //普通指针也是一种迭代器
    void test01()
    {
        int array[5] = { 1,4,5,3,8 };
        int* p = array;     //指针指向数据首地址  &array[0]
        for (int i = 0; i < 5; i++)
        {
            cout << *(p++) << endl;
        }
    }
    
    #include <vector>  //容器
    void test02()
    {
        //声明容器
        vector<int> v;  //声明一个容器 这个容器中存放int类型数据 对象名称为 v
        v.push_back(10);
        v.push_back(20);
        v.push_back(30);
        v.push_back(40);
    
        //遍历容器中的数据
        //遍历方式一 利用迭代器遍历
    
        vector<int>::iterator itBegin = v.begin();  //itBegin指向的是v容器的起始位置
        vector<int>::iterator itEnd = v.end();  //itEnd指向的是v容器的最后一个位置的下一个地址
        while (itBegin != itEnd)
        {
            cout << *itBegin << endl;
            itBegin++;
        }
    }
    
    int main()
    {
        test02();
        system("Pause");
        return 0;
    }

    如图:

    结果:

    第二种遍历方法

    第三种遍历方法 算法

    void myPrint(int v)     //回调函数
    {
        cout << v << endl;
    }
    #include <vector>  //容器
    #include <algorithm>    //使用系统算法头文件
    void test02()
    {
        //声明容器
        vector<int> v;  //声明一个容器 这个容器中存放int类型数据 对象名称为 v
        v.push_back(10);
        v.push_back(20);
        v.push_back(30);
        v.push_back(40);
    
        //遍历容器中的数据
        //利用迭代器遍历
    
        //遍历方式一
        //vector<int>::iterator itBegin = v.begin();  //itBegin指向的是v容器的起始位置
        //vector<int>::iterator itEnd = v.end();  //itEnd指向的是v容器的最后一个位置的下一个地址
        //while (itBegin != itEnd)
        //{
        //    cout << *itBegin << endl;
        //    itBegin++;
        //}
    
        //遍历方式二
       /* for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << *it << endl;
        }*/
    
        //遍历方式三 利用算法 需要引入头文件 还要有一个回调函数
        for_each(v.begin(), v.end(), myPrint);      //for_each(初始地址,结束,回调函数)
    }

    自定义类型

    //自定义类型
    class Person
    {
    public:
        Person(string name, int age)
        {
            this->m_Name = name;
            this->m_Age = age;
        }
        string m_Name;
        int m_Age;
    };
    void test03()
    {
        vector<Person> v;
        Person p1("张飞", 20);
        Person p2("关羽", 21);
        Person p3("刘备", 22);
        Person p4("吕布", 20);
    
        v.push_back(p1);
        v.push_back(p2);
        v.push_back(p3);
        v.push_back(p4);
    
        for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << "姓名: " << (*it).m_Name << " 年龄: " << it->m_Age << endl; //*it是容器内的数据类型 即<Person>里面的数据类型   it是Person的指针
        }
    }
    
    int main()
    {
        test03();
        //test02();
        //test01();
        system("Pause");
        return 0;
    }

    结果:

    存放自定义数据的指针

    //存放自定义数据类型的指针
    void test04()
    {
        vector<Person *> v;
        Person p1("张飞", 20);
        Person p2("关羽", 21);
        Person p3("刘备", 22);
        Person p4("吕布", 20);
    
        v.push_back(&p1);       //因为定义的容器是Person的指针 所以要存放地址
        v.push_back(&p2);
        v.push_back(&p3);
        v.push_back(&p4);
    
        for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << "姓名: " << (*it)->m_Name << " 年龄:" << (*(*it)).m_Age << endl; //*it即Person* 是Person对象的指针 所以用->取值 , **it 指针指向的内容,即Person对象
        }
    }

    结果:

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/yifengs/p/15187989.html
Copyright © 2011-2022 走看看