• C++入门 -- 迭代器及类型推导


    迭代器

    迭代器 (iterator) 是 C++ 程序中常用的一种设计模式,它最重要的作用是为访问容器提供了统一的接口。

    C++ STL 有许多容器,例如 vector、list、deque、map、unordered_map 。
    而我们常常对不同的容器有相同的操作,比如在容器中查找一个元素、找出满足条件的所有元素并返回。为了不必为每个容器写一个操作函数,我们希望容器提供一个访问元素的统一接口,从而复用操作函数。
    这个接口就是迭代器。

    来源:简书 - https://www.jianshu.com/p/40e40aef2305

    例子:

     1 #include <iostream>
     2 #include <numeric>
     3 #include <vector>
     4 #include <string>
     5 #include <list>
     6 
     7 int main() {
     8     //普通的数组,一旦申请,不能在扩增
     9     int ary[5] = {1,2,3,4,5};
    10 
    11     //容器 -- 动态数组 不用指定大小,会根据数组当前的使用情况进行动态扩容
    12     //模板类型
    13     std::vector<int> v;
    14 
    15     //插入数据
    16     v.push_back(1);
    17     v.push_back(2);
    18     v.push_back(3);
    19 
    20     //使用迭代器的方式遍历数组
    21     std::vector<int>::iterator it;  //迭代器,模板类中的内部类
    22     for(it = v.begin(); it != v.end(); it++) {
    23         std::cout << *it << std::endl;   // *it来访问模板类的具体的值
    24     }
    25 
    26     //统一的遍历方式 连表   
    27     std::list<std::string> l;
    28     l.push_back("Hello");
    29     l.push_back("world");
    30 
    31     std::list<std::string>::iterator it2;
    32     for(it2 = l.begin(); it2 != l.end(); it2++) {
    33         std::cout << (*it2).c_str() << std::endl;
    34     }
    35 
    36     return 0;
    37 }

    改进1:

    ...
        //统一的遍历方式 连表   
        std::list<std::string> l;
        l.push_back("Hello");
        l.push_back("world");
    
        // std::list<std::string>::iterator it2;
        // for(it2 = l.begin(); it2 != l.end(); it2++) {
        //     std::cout << (*it2).c_str() << std::endl;
        // }
        
        //auto类型推导关键字  解决书写过长的迭代器类型的烦恼
        for(auto it2 = l.begin(); it2 != l.end(); it2++) {
        std::cout << (*it2).c_str() << std::endl;
        }
    ...

    改进2:

    ...
        //统一的遍历方式 连表   
        std::list<std::string> l;
        l.push_back("Hello");
        l.push_back("world");
    
        for(std::string str : l) {
            std::cout << str.c_str() << std::endl;
        }
    ...

    for(元素类型 元素对象:容器对象)

    {
      循环体
    }

    用元素对象依次结合容器对象中的每一个元素,每结合一个元素,执行依次循环体,直至容器内的所有元素都被结合完为止.

    改进3:

    ...
        //统一的遍历方式 连表   
        std::list<std::string> l;
        l.push_back("Hello");
        l.push_back("world");
    
        for(auto str : l) {    //auto自动推导类型
            std::cout << str.c_str() << std::endl;
    
        }
    ...
  • 相关阅读:
    BOM(JavaScript高程笔记)
    初识AJAX
    初识DOM
    《JavaScript DOM 编程艺术》读书笔记
    git/ TortoiseGit 在bitbucket.org 使用证书登陆
    原生JS的对象常用操作总结
    js 判断对象相等
    IE 坑爹的浏览器兼容模式
    Linux+mysql混杂
    前端-CS-04
  • 原文地址:https://www.cnblogs.com/y4247464/p/13933014.html
Copyright © 2020-2023  润新知