zoukankan      html  css  js  c++  java
  • c++第二十一天

    p115~p118:

    1、区分int *p[4];和int (*p)[4];。前者是整型指针的数组,后者是指向含有4个整数的数组。

    2、规避上述问题的方法就是:使用 auto和 decltype。

    3、对于a[3][4],有p = &a[0];(相当于p = a;)则 *p 为a[0]。(解引用后仍为地址)

    4、使用类型别名提高程序的可读性。

    5、优先使用标准库提供的类型而不是C++内置的底层替代品。

    练习 3.43

    版本1:使用范围for语句

    #include<iostream>
    using std::cout;
    using std::endl;
    int ia[3][4];
    int main()
    {
        // 必须使用引用类型,否则编译无法通过。
        for (int (&row)[4] : ia) {    
            for (int cnt : row) {
                cout << cnt << endl;
            }
        }
        return 0;
    }

     版本2:使用下标运算符

    #include<iostream>
    using std::cout;
    using std::endl;
    #include<cstddef>    // 不加也可使用 size_t 
    int ia[3][4];
    int main()
    {
        // 使用size_t而非int可以写出扩展性更好的代码(参考网上资料)
        for (size_t i = 0; i != 3; ++i) {
            for (size_t j = 0; j != 4; ++j) {
                cout << ia[i][j] << endl;
            }
        }
        return 0;
    }

     版本3:使用指针

    #include<iostream>
    using std::cout;
    using std::endl;
    #include<iterator>
    using std::begin;
    using std::end;
    int ia[3][4];
    int main()
    {
        for (int (*p)[4] = begin(ia); p != end(ia); ++p) {
            for (int *q = begin(*p); q != end(*p); ++q) {
                cout << *q << endl;
            }
        }
        return 0;
    }

    练习 3.44

    使用类型别名改写上一个练习中的程序。

    1

    #include<iostream>
    using std::cout;
    using std::endl;
    int ia[3][4];
    int main()
    {
        using int_array = int[4];
        for (int_array &row : ia) {    
            for (int cnt : row) {
                cout << cnt << endl;
            }
        }
        return 0;
    }

     2

    #include<iostream>
    using std::cout;
    using std::endl;
    #include<cstddef>    
    int ia[3][4];
    int main()
    {
        using index = size_t;
        for (index i = 0; i != 3; ++i) {
            for (index j = 0; j != 4; ++j) {
                cout << ia[i][j] << endl;
            }
        }
        return 0;
    }

    3

    #include<iostream>
    using std::cout;
    using std::endl;
    #include<iterator>
    using std::begin;
    using std::end;
    int ia[3][4];
    int main()
    {
        using int_array = int[4];
        for (int_array *p = begin(ia); p != end(ia); ++p) {
            for (int *q = begin(*p); q != end(*p); ++q) {
                cout << *q << endl;
            }
        }
        return 0;
    }

    练习 3.45

    使用auto改写程序。

    1

    #include<iostream>
    using std::cout;
    using std::endl;
    int ia[3][4];
    int main()
    {
        for (auto &row : ia) {    
            for (auto cnt : row) {
                cout << cnt << endl;
            }
        }
        return 0;
    }

    2

    #include<iostream>
    using std::cout;
    using std::endl;
    #include<cstddef>    
    int ia[3][4];
    int main()
    {
        for (auto i = 0; i != 3; ++i) {
            for (auto j = 0; j != 4; ++j) {
                cout << ia[i][j] << endl;
            }
        }
        return 0;
    }

    3

    #include<iostream>
    using std::cout;
    using std::endl;
    #include<iterator>
    using std::begin;
    using std::end;
    int ia[3][4];
    int main()
    {
        for (auto p = begin(ia); p != end(ia); ++p) {
            for (auto q = begin(*p); q != end(*p); ++q) {
                cout << *q << endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    nexus-3.2.0-01.zip安装以及如何启动服务
    Windows环境使用Nexus-3.x搭建Maven私服
    Maven中settings.xml的配置项说明
    Maven之setting.xml配置文件详解
    设置MAVEN_OPTS环境变量
    使用Nexus搭建Maven私服
    spark-submit参数配置
    spark遇到的问题(持续更新)
    hikari参数配置
    java 开发遇到的问题
  • 原文地址:https://www.cnblogs.com/xkxf/p/6428631.html
Copyright © 2011-2022 走看看