C++ STL array

STL(Standard Template Library)中的std::array是C++11引入的一个模板类,用于表示固定大小的数组。与传统的C++静态数组相比,它具有一些额外的功能,例如可以使用STL算法、内置边界检查等,但大小依然在编译时确定。

std::array的原理

std::array是一个轻量的容器,封装了C++的传统静态数组,并提供了与STL容器一致的接口。与传统数组不同的是,它具有面向对象的特性,支持诸如size()at()等成员函数,并且与STL算法可以直接配合使用。

常见操作

  1. 声明和初始化: 和传统数组类似,可以在声明时初始化,大小必须是编译时常量。

  2. 访问元素: 通过[]运算符或at()方法访问元素,at()会进行边界检查,越界时会抛出异常。

  3. 迭代遍历: 可以使用传统的for循环,也可以使用范围for循环。

  4. 与STL算法兼容std::array与STL算法函数很好地集成,如std::sortstd::find等。

std::array 使用示例

#include <iostream>
#include <array>  // 引入 std::array 头文件
#include <algorithm>  // 引入STL算法

int main() {
    // 声明并初始化一个包含5个元素的std::array
    std::array<int, 5> myArray = {10, 20, 30, 40, 50};

    // 使用下标运算符访问元素
    std::cout << "First element: " << myArray[0] << std::endl;

    // 使用 at() 方法访问元素(带边界检查)
    try {
        std::cout << "Element at index 2: " << myArray.at(2) << std::endl;  // 正常访问
        std::cout << "Element at index 5: " << myArray.at(5) << std::endl;  // 越界访问,抛出异常
    } catch (const std::out_of_range& e) {
        std::cerr << "Out of range error: " << e.what() << std::endl;
    }

    // 获取数组的大小
    std::cout << "Array size: " << myArray.size() << std::endl;

    // 遍历数组
    std::cout << "Array elements: ";
    for (const auto& elem : myArray) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    // 使用STL算法(例如排序)
    std::sort(myArray.begin(), myArray.end());
    std::cout << "Sorted elements: ";
    for (const auto& elem : myArray) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

常见成员函数

  • at(size_t index):带边界检查的元素访问函数,越界会抛出std::out_of_range异常。
  • operator[]:传统的下标运算符,不进行边界检查。
  • size():返回数组的大小,编译时常量。
  • front()back():分别返回数组的第一个和最后一个元素。
  • fill(value):将数组的所有元素设置为指定值。
  • swap(array):交换两个数组的内容。

注意事项

  1. 固定大小std::array的大小是固定的,不能在运行时调整,大小必须在编译时已知。
  2. 性能std::array的性能和传统的C++静态数组相近,因其在栈上分配内存。
  3. 边界检查:使用at()进行元素访问可以避免越界访问导致的未定义行为。

优缺点

  • 优点

    • 封装了传统数组,具有STL容器的接口。
    • 支持边界检查,减少数组越界带来的问题。
    • 与STL算法直接兼容。
  • 缺点

    • 数组大小在编译时固定,无法动态调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值