C++ array容器

本文介绍了C++中的std::array容器,强调其固定大小、内存连续的特点以及常数时间复杂度的元素访问。展示了初始化、修改、排序、查找、求和以及统计等操作的示例代码,强调了在已知数组大小的情况下使用std::array的优势。
摘要由CSDN通过智能技术生成

array容器

#include <iostream>
#include <array>
#include <algorithm>
#include <numeric>

/*
 array 容器示例
 array大小固定,不可改变
 在内存中是连续的
 获取元素的复杂度是常数,与array元素个数无关
 array是对原始数组的封装,也可以获取原始数组的指针
 如果数组个数固定,尽量使用array,可以使用标准库的算法
 C++原始数组不可使用标准库的算法
*/

void display(const std::array<int,5> &arr){
    // 打印 array 数组内的元素
    for (const auto &i: arr)
        std::cout << i << " ";

    std::cout << std::endl;
}

void test1()
{
    // 两种初始化方式
    std::array <int,5> arr1 {1, 2, 3, 4, 5};
    std::array <int,5> arr2;     // 未初始化 里面为随机值
    arr2 = {10, 20, 30, 40, 50};

    display(arr1);
    display(arr2);
    
    // 修改 2种方式
    arr1[0] = 9;
    arr1.at(1) = 8;
    display(arr1);

    // 获取第一个元素   .front()
    std::cout << "获取第一个元素:" << arr1.front() << std::endl;
    // 获取最后一个元素 .back()
    std::cout << "获取最后一个元素:" << arr1.back() << std::endl;

    

}

void test2()
{
    std::array <int,5> arr1 {1, 2, 3, 4, 5};
    std::array <int,5> arr2 {10, 20, 30, 40, 50};

    // 修改
    // arr1.fill(0);   // 全部修改为0
    // display(arr1);

    arr1.swap(arr2);  // 两个数组元素全部互换
    display(arr1);
    display(arr2);

}

void test3()
{
    std::array <int,5> arr1 {1, 2, 3, 4, 5};
    int *ptr = arr1.data(); // 返回数组的首地址 必须为指针

    std::cout << ptr << std::endl;  // 首地址
    std::cout << *ptr << std::endl; // 第一个元素

    // 通过指针 修改
    *ptr = 1000;   
    display(arr1);
    
}

void test4()
{
    std::array <int,5> arr1 {4, 3, 2, 1, 5};
    display(arr1);
    // 排序 第一个,最后一个
    std::sort(arr1.begin(), arr1.end());  
    display(arr1);

}

void test5()
{
    std::array <int,5> arr1 {4, 3, 2, 1, 5};
    // 迭代器类型:iterator 需要使用指针才能获取
    // 最小值函数:min_element(第一个,最后一个+1)
    std::array<int, 5>::iterator min_val = std::min_element(arr1.begin(), arr1.end());
    // 最大值函数:max_element
    auto max_val = std::max_element(arr1.begin(), arr1.end());
    std::cout << "min: " << *min_val << std::endl;
    std::cout << "max: " << *max_val << std::endl;
}
void test6()
{
    std::array <int,5> arr1 {4, 3, 1, 6, 2};

    std::cout << *arr1.begin() << std::endl;   // 第一个
    std::cout << *(arr1.end()-1) << std::endl; // 最后一个  必须要减一

    auto adjacent = std::adjacent_find(arr1.begin(), arr1.end());

    
    if (adjacent != arr1.end())   // 必须加判断 否则 会打印出 *arr1.end() 的内容
        std::cout << " " << *adjacent << std::endl;
    else
        std::cout << " 没有找到相邻两个相同的元素" << *adjacent << std::endl;
}
void test7()
{
    std::array <int,5> arr1 {1, 1, 1, 1, 1};
    int sum = std::accumulate(arr1.begin(), arr1.end(), 0);  // 求和 起始值为0
    std::cout << sum << std::endl;
}
void test8()
{
    std::array <int,5> arr1 {1, 1, 1, 1, 1};
    int counts = std::count(arr1.begin(), arr1.end(), 1); // 统计1 出现的次数
    std::cout << "1 共出现了 " <<counts <<  "次" <<std::endl;
}

int main()
{

    // test1();
    // test2();
    // test3();
    // test4();
    // test5();
    // test6();
    // test7();
    test8();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默执_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值