• (三)STL序列容器(array)


    初始化

    1. std::array<double,10> arr;
        创建10个浮点型元素,但是未显示指定10个元素的值,因此各个元素的值是不确定的,array容器是不会做默认初始化操作
    2. std::array<double,10> arr{};   所有元素默认初始化为0.0
    3. std::array<double,19> arr{1.9,20.2,1.2,2};   只初始化了前4个元素,剩余的元素都被初始化为0.0

    使用

    #include <iostream>
    //需要引入 array 头文件
    #include <array>
    #include <vector>
    using namespace std;
    
    /*
    (1) at(n)
        返回容器n中的引用
    (2) get<n>
        模板函数,能够获取容器的第n个元素
    (3) begin()
        返回第一个元素的迭代器
    (4) end()
        返回最后一个元素之后的一个位置的正向迭代器n+1
    (5) data()
        得到指向容器首个元素的指针,通过该指针,可以获得容器中各个元素
    (6) size()
        返回容器元素的个数,返回值size_t
    */
    int main()
    {
        cout << "------基本用法-------" << endl;
        array<int, 4> arr1{};
        // 初始化
        for (int i = 0; i < arr1.size(); i++) {
            arr1.at(i) = i+10;
        }
        for (auto b1 = arr1.begin(); b1 < arr1.end(); b1++) {
            cout << *b1 << endl;
        }
    
        cout << "-------随机访问------" << endl;
        array<int, 4> arr2;
        int h = 22;
        auto first = arr2.begin();
        auto end = arr2.end();
        // 初始化
        while (first != end) {
            *first = h;
            ++first;
            h++;
        }
    
        first = arr2.begin();
        while (first != end) {
            cout << *first << endl;
            ++first;
        }
    
        cout << "-------访问单个------" << endl;
        array<string, 3> arr3{ "china","english","guba" };
        cout << get<2>(arr3) << endl; // get<3>越界
        cout << arr3.at(2) << endl; // at(n)
        cout << *(arr3.data()) << endl;
        cout << *(arr3.data()+1) << endl;
        cout << arr3[1] << endl;
    
        cout << "-------访问多个------" << endl;
        array<int, 5> arr4;
        array<int, 5> arr5;
    
        // 初始化arr4
        for (size_t b2 = 0; b2 < arr4.size(); b2++) {
            arr4.at(b2) = 9;
        }
    
        // 初始化arr5
        int n = 10;
        for (auto& b3 : arr5) {
            b3 = n;
            n++;
        }
    
        // 打印arr4的值
        for (auto b4 = arr4.begin(); b4 < arr4.end(); b4++) {
            cout <<"b4: "<< *b4 << endl;
        }
    
        // 打印arr5的值
        for (auto b5 = arr5.begin(); b5 < arr5.end(); b5++) {
            cout << "b5: " << *b5 << endl;
        }
    
        cout << "-------升级------" << endl;
        // 当两个array容器满足大小相同并且保持元素类型相同时,可以直接赋值
        array<char, 30>arr6{ "you are rich" };
        array<char, 30>arr7{ "you need food" };
        arr6 = arr7;
        cout << arr6.data() << endl;
        cout << arr7.data() << endl;
    
        system("pause");
        return 1;
    }

     

    做一个优秀的程序媛
  • 相关阅读:
    一种可以避免数据迁移的分库分表scale-out扩容方式
    ZooKeeper快速搭建
    ZooKeeper典型应用场景一览
    基于 Quartz 开发企业级任务调度应用
    mac安装dart环境配置及中途的错误解决
    Android Studio3.3打包报错AAPT2 process unexpectedly exit. Error output:
    android在App应用内打开word、xls、pdf等office文档(基于腾讯tbs)
    android分渠道打包,监测日活量统计(基于友盟SDK)
    PHP环境搭建-Windows系统下PHP环境搭建
    使用bugly热更新时自定义升级弹窗的UI样式
  • 原文地址:https://www.cnblogs.com/oytt/p/13953522.html
Copyright © 2020-2023  润新知