当前位置: 首页 > news >正文

C++容器array

C++容器array

  • 定义
  • 初始化
    • 默认初始化
    • 列表初始化
  • 常用函数
  • 迭代
  • 其他

定义

  • std::array 是一个定长容器,其大小在编译时就必须确定,之后不能改变
  • 通常分配在栈上,使用连续的栈内存布局,这使得它在性能上很接近 C 风格的数组
  • 与 C 风格数组不同,std::array 不会自动退化为指针,提供了更好的类型安全性

初始化

默认初始化

不提供初始值,所有元素将执行默认初始化。对于内置类型如 int,这意味着元素值未定义(包含"垃圾值")

std::string getStringFromU8string(const std::u8string& u8str) {return std::string(reinterpret_cast<const char*>(u8str.data()), u8str.size());
}std::u8string getU8stingFromString(const std::string& str) {return std::u8string(reinterpret_cast<const char8_t*>(str.data()), str.size());
}int main()
{system("chcp 65001");std::array<int, 4> arr1;for (auto it : arr1){cout << "arr1-> " << it << endl;}std::array<std::u8string, 4> arr2;for (auto it : arr2){cout << "arr2-> " << getStringFromU8string(it) << endl;}
}

列表初始化

数组长度超过实际元素个数,剩余元素会初始化默认值

int main()
{system("chcp 65001");std::array<std::u8string, 2> arr1 = { u8"张三", u8"李四" };for (auto it : arr1){cout << "arr1-> " << getStringFromU8string(it) << endl;}std::array<std::u8string, 4> arr2{ u8"北京", u8"上海", u8"广州", u8"深圳" };for (auto it : arr2){cout << "arr2-> " << getStringFromU8string(it) << endl;}// 自动推导std::array arr3 = { u8"张三", u8"李四" };auto arr4 = { u8"北京", u8"上海", u8"广州", u8"深圳" };for (auto it : arr3){cout << "arr3-> " << getStringFromU8string(it) << endl;}for (auto it : arr4){cout << "arr4-> " << getStringFromU8string(it) << endl;}
}

常用函数

方法功能说明
at(index)安全访问元素,越界时抛出 std::out_of_range 异常
operator[]直接访问元素(不检查边界)
front()返回第一个元素
back()返回最后一个元素
data()返回指向内部数组首元素的指针(可用于 C API)
empty()如果大小为 0 返回 true(对于非零大小的 array 总是 false)
size()返回元素个数(编译时常量)
max_size()返回最大可能大小(通常等于 size())
fill(value)将所有元素设置为指定值
swap(other)与另一个 array 交换内容
int main()
{system("chcp 65001");std::array<std::u8string, 4> arr1{ u8"北京", u8"上海", u8"广州", u8"深圳" };cout << "arr1.size()= " << arr1.size() << endl;cout << "arr1.max_size()= " << arr1.max_size() << endl;cout << "arr1.empty()= " << boolalpha << arr1.empty() << endl;cout << "arr1[1]= " << getStringFromU8string(arr1[1]) << endl;cout << "arr1.at(0)= " << getStringFromU8string(arr1.at(0)) << endl;// 第一个元素cout << "arr1.front()= " << getStringFromU8string(arr1.front()) << endl;// 最后一个元素cout << "arr1.back()= " << getStringFromU8string(arr1.back()) << endl;// 数组首元素的指针std::u8string* ptr = arr1.data();for (int i = 0; i < arr1.size(); i++){cout << getStringFromU8string(ptr[i]) << endl;}// 将所有元素设置为指定值arr1.fill(u8"张三");for (auto it : arr1){cout << getStringFromU8string(it) << endl;}// 与另一个 array 交换内容std::array<std::u8string, 4> arr2{ u8"北京", u8"上海", u8"广州", u8"深圳" };arr1.swap(arr2);for (auto it : arr1){cout << "arr1-> " << getStringFromU8string(it) << endl;}for (auto it : arr2){cout << "arr2-> " << getStringFromU8string(it) << endl;}
}

迭代

常用forbegin-endrbegin-rend

int main()
{system("chcp 65001");std::array<std::u8string, 4> arr1{ u8"北京", u8"上海", u8"广州", u8"深圳" };// for循环for (auto it : arr1) {cout << getStringFromU8string(it) << endl;}// begin-end正向遍历for (auto it = arr1.begin(); it != arr1.end(); it++){cout << "begin-end " << getStringFromU8string(*it) << endl;}// cbegin-cend正向遍历for (auto it = arr1.cbegin(); it != arr1.cend(); it++){cout << "cbegin-cend " << getStringFromU8string(*it) << endl;}// rbegin-rend反向遍历for (auto it = arr1.rbegin(); it != arr1.rend(); it++){cout << "rbegin-rend " << getStringFromU8string(*it) << endl;}
}

其他

特性std::array原生数组std::vector
大小是否固定
内存位置栈(通常)栈/静态区
支持拷贝赋值
支持 STL 算法❌(需指针)
越界检查at() 支持不支持at() 支持
性能极高极高略低(动态分配)
传递到函数可直接传值退化为指针可传引用/值
http://www.dtcms.com/a/529397.html

相关文章:

  • 智能仓储物流6大系统OMS、WES、WMS、WCS、AGV、数字孪生技术,到底都管什么?
  • 徐州专门做网站百度指数怎么用
  • 多目标优化领域前沿创新亮点
  • 长春网站推广南宁建设学院官网
  • 上海企业建站费用空白网站建设
  • Java—枚举类
  • 【NestJS】深入理解NestJS装饰器原理
  • 网站设计师接单网站建设的大概费用
  • 俐侎族网站建设背景wordpress自动修改图
  • 西双版纳网站建设公司国内最大的域名交易平台
  • 湘潭市建设工程质量监督站网站微信推广朋友圈广告
  • 企业网站网址化工企业网站模板 aspx
  • 知识图谱构建流程与技术架构
  • 重庆手机网站制作wordpress 4.2.8
  • 16 Electron 应用自动更新方案:electron-updater 完整指南
  • 手机网站页面如何制作软件商贸有限公司企业简介
  • 重庆长寿网站设计公司哪家好做酒店管理网站的作用
  • 【系统分析师】高分论文:论需求分析及其应用(配网运维管控项目)
  • 大专计算机技术专业就业方向:解读、规划与提升指南
  • 如何在手机上做网站用dreamware制作网页
  • C# 可空类型
  • 数据结构12:二叉树的API及其实现
  • 用c 建网站时怎么做导航菜单栏访问升级每天自动更新
  • 江门做网站设计wordpress通用页面模板
  • 苏州吴中区专业做网站网站建设制作设计开发
  • 2025辽宁CSP-XL编程设计题与参考答案
  • 网站怎么做值班表郫都区规划建设局网站
  • 网站做查赚钱如何做简单的网站 域名邮箱
  • 网站建设与管理的书中国建设银行网站首页下载
  • Java—单例类(设计模式)