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

【STL三】序列容器——array容器

【STL三】序列容器——array

  • 一、array简介
  • 二、头文件
  • 三、模板类
  • 四、成员函数
    • 1、迭代器
    • 2、元素访问
    • 3、容量
    • 4、操作
  • 五、demo
    • 1、容量(不使用迭代器)
    • 2、使用迭代器
    • 3、元素访问 at()、front()、back()、data()

一、array简介

  • array 容器是 C++ 11 标准中新增的序列容器,简单地理解,它就是在 C++ 普通数组的基础上,添加了一些成员函数和全局函数。在使用上,它比普通数组更安全,且效率并没有因此变差。

  • 和其它容器不同,array 容器的大小是固定的,无法动态的扩展或收缩,这也就意味着,在使用该容器的过程无法借由增加或移除元素而改变其大小,它只允许访问或者替换存储的元素。

  • 实际项目应用特别少。

在这里插入图片描述

二、头文件

#include <array>

三、模板类

template<
    class T,
    std::size_t N
> struct array;

四、成员函数

1、迭代器

成员函数功能
begin()返回指向容器中第一个元素的随机访问迭代器。
end()返回指向容器最后一个元素之后一个位置的随机访问迭代器,通常和 begin() 结合使用。
rbegin()返回指向最后一个元素的随机访问迭代器。
rend()返回指向第一个元素之前一个位置的随机访问迭代器。
cbegin()和 begin() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素。
cend()和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crbegin()和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crend()和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。

2、元素访问

成员函数功能
operator[]访问指定的元素
at(n)返回容器中 n 位置处元素的引用,该函数自动检查 n 是否在有效的范围内,如果不是则抛出 out_of_range 异常。
front()返回容器中第一个元素的直接引用,该函数不适用于空的 array 容器。
back()返回容器中最后一个元素的直接应用,该函数同样不适用于空的 array 容器。
data()返回一个指向容器首个元素的指针。利用该指针,可实现复制容器中所有元素等类似功能。

3、容量

成员函数功能
size()返回容器中当前元素的数量,其值始终等于初始化 array 类的第二个模板参数 N。
max_size()返回容器可容纳元素的最大数量,其值始终等于初始化 array 类的第二个模板参数 N。
empty()判断容器是否为空,和通过 size()==0 的判断条件功能相同,但其效率可能更快。

4、操作

成员函数功能
fill(val)将 val 这个值赋值给容器中的每个元素。
array1.swap(array2)交换 array1 和 array2 容器中的所有元素,但前提是它们具有相同的长度和类型。

五、demo

1、容量(不使用迭代器)

//array 容器。
#include <iostream>
#include <array>
#include<string>
using namespace std;
int main()
{
    array<string,5>  words{ "one","two","three","four","five" }; //words被初始化成有5个元素(固定)
    cout << "遍历(正序):" << endl;
    for (int i = 0; i < words.size(); ++i)
        cout << words[i] << " "; //像普通数组一样使用数组容器
    return 0;
}

输出

遍历(正序):
one two three four five

2、使用迭代器

  • begin()、end()、rbegin()、rend()
    在这里插入图片描述
//array 容器。
#include <iostream>
#include <array>
#include<string>
#include<vector>
using namespace std;
int main()
{
    array<string,5>  words{ "one","two","three","four","five" }; //words被初始化成有5个元素(固定)

    cout << "遍历(正序):" << endl;
    // std::array<string>::iterator iter;//错误,arr容器不可以像其他容器这样定义初始化,我也不清楚。
    for ( auto iter = words.begin(); iter < words.end(); ++iter)
        cout << *iter << " "; 

    cout << endl;

    cout << "遍历(逆序):" << endl;
    for (auto iter = words.rbegin(); iter < words.rend(); ++iter)
        cout << *iter << " ";

    return 0;
}

输出

遍历(正序):
one two three four five
遍历(逆序):
five four three two one

3、元素访问 at()、front()、back()、data()

//array 容器。
#include <iostream>
#include <array>
#include<string>
using namespace std;
int main()
{
    array<string,5>  words{ "one","two","three","four","five" }; //words被初始化成有5个元素(固定)

    cout << "words.at(2)=" << words.at(2) << endl; 

    cout << "words.front()=" << words.front() << endl;

    cout << "words.back()=" << words.back() << endl;

    string* da=words.data();
    while (!da->empty())
    {
        cout << "words.data()=" << *da << endl;
        da++;
    }

    return 0;
}

输出

words.at(2)=three
words.front()=one
words.back()=five
words.data()=one
words.data()=two
words.data()=three
words.data()=four
words.data()=five
words.data()=

参考:
1、C++ STL 容器库 中文文档
2、STL教程:C++ STL快速入门
3、https://www.apiref.com/cpp-zh/cpp/header.html
4、https://en.cppreference.com/w/cpp/container


http://www.kler.cn/a/2394.html

相关文章:

  • uniapp新建项目hello,什么都没干提示应用未关联服务空间,请在uniCloud目录右键关联服务空间
  • 每日十题八股-2024年12月21日
  • UE5喷涂功能
  • Linux下部署MySQL8.0集群 - 主从复制(一主两从)
  • 多个Echart遍历生成 / 词图云
  • RestTemplate远程调用、服务注册、
  • 【面试题】大厂面试官:你做过什么有亮点的项目吗?
  • WEB安全基础知识
  • 【JDBC】JDBC 简介 ( JDBC 概念 | JDBC 本质 | 使用 JDBC 操作数据库的好处 | JDBC 提供的 API 组件 )
  • 正则表达式简介
  • 【LINUX】初识文件系统
  • 基于Spring Cloud集成OpenFeign应用feign客户端调用微服务
  • 【3.22】操作系统内存管理(整理)、Java并发
  • 程序员增加收入实战 让小伙伴们都加个鸡腿
  • 一台服务器最大能支持多少条 TCP 连接?问倒一大片。。。
  • 计算机组成原理——作业四
  • 网络编程套接字( TCP )
  • Prometheus监控实战之Blackbox_exporter黑盒监测
  • CMSIS-RTOS2 RTX5移植到GD32L233
  • 【练习题】python函数进阶练习
  • 【MySQL】1 MySQL的下载、安装与配置|提供安装包
  • EtherNet/IP网络模型
  • 【SpringBoot】Spring data JPA的多数据源实现
  • ChatGPT能否取代程序员?
  • css + js 超好看的消息提示
  • Python数据分析script必备知识(一)