C++ -- 学习系列 std::array 容器

1. std::array 是什么?

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

与数组一样,其底层存储空间是连续的。

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

2. 使用方法

2.1. array 的模板参数:

    1.1   T 代表 array 中元素的类型

    1.2   N 代表 array 中元素的个数

namespace std{template <typename T, size_t N>class array;
}

2.1  使用例子:

   

// main.cpp
#include<array>
#include<string>
#include<iostream>
#include<memory>template<typename T, size_t N>
void printArray(std::array<T, N>& arr)
{
//    for(int i=0; i<arr.size(); i++)
//    {
//        std::cout << arr[i] << " ";
//    }for(auto it = arr.begin(); it != arr.end(); it++){std::cout << *it << " ";}std::cout << std::endl;
}void  testArray()
{// 两种初始化// 1. 列表初始化std::array<int, 6> arr1 = {1, 2, 3, 4, 5};// 2. 每个元素初始化std::array<int, 6> arr2;for(int i=0; i<5; i++){arr2[i] = i+1;}std::cout << "print arr1 ---" << std::endl;printArray<int, 6>(arr1);std::cout << "print arr2 ---" << std::endl;printArray<int, 6>(arr2);std::array<int, 6> arr2(arr1);
}int main()
{testArray();return 0;
}

3. 简单实现

     

// may_array.h#include<initializer_list>
#include<iostream>template<typename _Tp, int N>
class my_array
{
public:my_array();my_array(std::initializer_list<_Tp> valList);~my_array();_Tp& operator[](int index){return *(this->data + index);}_Tp& at(int index){return this->operator[](index);}_Tp& front(){return *this->data;}_Tp& back(){return *(this->data + N - 1);}_Tp* begin(){return this->data;}_Tp* end(){return this->data + N;}const _Tp* const_begin(){return this->data;}const _Tp* const_end(){return this->data + N;}private:_Tp *data;_Tp* iterator;const _Tp* const_iterator;};template<typename _Tp, int N>
my_array<_Tp, N>::my_array()
{this->data = new _Tp[N];
}template<typename _Tp, int N>
my_array<_Tp, N>::~my_array()
{delete data;
}template<typename _Tp, int N>
my_array<_Tp, N>::my_array(std::initializer_list<_Tp> valList)
{if(valList.size() != N){std::cout << "error arguments size not equals to "<< N << std::endl;return;}this->data = new _Tp[N];int i = 0;for(auto iter = valList.begin(); iter != valList.end(); iter++){*(this->data + (i++)) = *iter;}
}// main.cpp
#include<iostream>
#include<string>
#include"my_array.h"template <typename V, int N>
void print(my_array<V, N>& arr)
{for(int i=0; i<N; i++){std::cout << arr[i] << std::endl;}
}int main(int argc, char *argv[])
{my_array<int, 6> arr1;for(int i = 0; i < 6; i++){arr1[i] = i + 1;}for(auto iter = arr1.begin(); iter != arr1.end(); iter++){std::cout << *iter << " ";}std::cout << "-------" <<std::endl;for(auto iter = arr1.const_begin(); iter != arr1.const_end(); iter++){std::cout << *iter << " ";}std::cout << "-------" <<std::endl;my_array<std::string, 3> arr2 = {"aa", "bb", "cc"};for(auto iter = arr2.begin(); iter != arr2.end(); iter++){std::cout << *iter << " ";}std::cout << "-------" <<std::endl;for(auto iter = arr2.const_begin(); iter != arr2.const_end(); iter++){std::cout << *iter << " ";}std::cout << "-------" <<std::endl;return 0;
}

  

参考文档:array 类(C++ 标准库) | Microsoft LearnC++ array(STL array)容器用法详解 (biancheng.net)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python模糊匹配(fuzzywuzzy package)

from fuzzywuzzy import fuzz from fuzzywuzzy import process1.关键方法说明 ratio 要字符完全一致&#xff0c;匹配精度才较高partial_ratio 要字符部分一致&#xff0c;匹配精度较高token_sort_ratio 即使字符顺序不一致&#xff0c;也能较好匹配token_set_ratio 即使字符顺…

【环境配置】基于Docker配置Chisel-Bootcamp环境

文章目录 Chisel是什么Chisel-Bootcamp是什么基于Docker配置Chisel-Bootcamp官网下载Docker安装包Docker换源启动Bootcamp镜像常用docker命令 可能产生的问题 Chisel是什么 Chisel是Scala语言的一个库&#xff0c;可以由Scala语言通过import引入。 Chisel编程可以生成Verilog代…

深入了解OSI模型:计算机网络的七大层次

目录 OSI模型 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 OSI模型 OSI模型是一个网络通信的概念模型&#xff0c;用于描述计算机网络中各个不同层次之间的通信和功能。它将网络通信分为七个不同的层次&#xff0c;每个层次负责不同的任务&#xff0c;使得网…

paddle框架的使用

Paddle是由百度开发的深度学习框架&#xff0c;支持声明式和命令式编程风格。它还支持深度神经网络的超大规模训练和神经架构的自动设计。您可以使用 Paddle 构建用于训练的神经网络模型&#xff0c;具体步骤如下&#xff1a; 导入桨模块和其他必要的模块&#xff0c;如numpy&…

golang 运算符

目录 1. golang 运算符1.1. Types of Operators1.2. Bitwise Operators (位运算符)1.3. Logical Operators (逻辑运算符)1.4. Arithmetic Operators (算术运算符)1.5. Assignment Operators (赋值运算符)1.6. Comparison Operators (比较运算符) 1. golang 运算符 1.1. Types …

c语言练习58:⾃定义类型:结构体

⾃定义类型&#xff1a;结构体 结构体的概念 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构体是一个种自定义的数据类型&#xff0c;它可以由很多个默认数据类型组成。它主要用于描述复杂场景下的变量。 例如&#xff0c;想…

文件上传漏洞~操作手册

目录 上传文件一般过滤方式 客服端校验 服务端校验 黑白名单机制 常规文件上传漏洞绕过 客户端绕过 1.游览器禁用JavaScript 2.正常burp suite抓包改包 服务端绕过 1.Content-Type绕过 2.黑名单绕过 1&#xff09;命名规则绕过 2&#xff09;大小写绕过 3&#x…

vue入门及小项目小便签条

vue 框架:是一个半成品软件&#xff0c;是一套可重用的&#xff0c;通用的&#xff0c;软件基础代码模型。基于框架进行开发&#xff0c;更加快捷 &#xff0c;更加高效 v-bind为HTML标签绑定属性值&#xff0c;如设置href&#xff0c;css样式等 v-model在表单元素上创建双向数…

C++ 太卷,转 Java?

最近看到知乎、牛客等论坛上关于 C 很多帖子&#xff0c;比如&#xff1a; 2023年大量劝入C 2023年还建议走C方向吗&#xff1f; 看了一圈&#xff0c;基本上都是说 C 这个领域唯一共同点就是都使用 C 语言&#xff0c;其它几乎没有相关性。 的确是这样&#xff0c;比如量化交…

c++模版元编程-函数模版

C模板元编程&#xff08;Template Metaprogramming&#xff0c;TMP&#xff09;是一种使用C模板语言特性进行编程的技术&#xff0c;主要用于在编译期间进行计算和类型推导。通过使用TMP&#xff0c;可以在编译期间生成代码&#xff0c;从而实现更高效和更灵活的程序设计。 TM…

VM ware中Linux连网

在公司时,想搭建一下docker,结果发现连不上网,那就自己动手操作一下 一、联网配置 1.1 ping 发现ping不通&#xff0c;说明虚拟机此时无法与外界网络互连&#xff0c;需要修改设置联网 1.2 ifconfig查看网络配置 注意第一行显示的是ens33还是ens32,后面配置会用到 1.3 获取ro…

达梦数据库如何收集统计信息?

1、收集shema统计信息 CALL DBMS_STATS.GATHER_SCHEMA_STATS(大写的用户名,100,TRUE,FOR ALL COLUMNS SIZE AUTO); 2、收集表的统计信息 CALL DBMS_STATS.GATHER_TABLE_STATS(大写的用户名, 大写的表名,NULL,100,TRUE,FOR ALL COLUMNS SIZE AUTO); 3、收集索引的统计信息 CALL…

WebGL模型视图投影矩阵

WebGL透视投影_山楂树の的博客-CSDN博客中的PerspectiveView代码一个问题是&#xff0c;我们用了一大段枯燥的代码来定义所有顶点和颜色的数据。示例中只有6个三角形&#xff0c;我们还可以手动管理这些数据&#xff0c;但是如果三角形的数量进一步增加的话&#xff0c;那可真就…

如何在 Excel 中求平方根

需要在 Excel 中求一个数字的平方根吗&#xff1f;使用几个内置的 Excel 函数和公式可以轻松计算平方根。在本分步指南中&#xff0c;您将学习在 Excel 中计算平方根的 5 种不同方法&#xff0c;包括使用 SQRT 函数、POWER 函数、指数公式、VBA 代码和 Power Query。跟随教程&a…

TrOCR – 基于 Transformer 的 OCR 入门

一、TrOCR 架构 近些年,光学字符识别 (OCR) 出现了多项创新。它对零售、医疗保健、银行和许多其他行业的影响是巨大的。与深度学习的许多其他领域一样,OCR领域也看到了Transformer 神经网络的重要性和影响。如今,出现了像TrOCR(Transformer OCR)这样的模型,它在准确性方面…

查看实时日志

要查看实时日志&#xff0c;您可以使用以下几种常见的方法&#xff1a; 使用 tail 命令&#xff1a; tail 命令可以显示文件的末尾内容&#xff0c;您可以结合 -f 参数实时地查看日志文件的更新。例如&#xff1a; tail -f /path/to/logfile.log 将 /path/to/logfile.log 替换…

项目知识点总结-分页(三)

后端分页查询接口&#xff1a; Controller Service&#xff1a; Mapper&#xff1a; //分页搜索会议的方法List<SearchMeeting> getAllSearchMeeting(Param("sm") SearchMeeting searchMeeting,Param("page") Integer page,Param("pageSize&q…

games101 作业2

题目 光栅化一个三角形 1. 创建三角形的 2 维 bounding box。 2. 遍历此 bounding box 内的所有像素&#xff08;使用其整数索引&#xff09;。然后&#xff0c;使用像素中心的屏幕空间坐标来检查中心点是否在三角形内。 3. 如果在内部&#xff0c;则将其位置处的插值深度值 (…

我学编程全靠B站了,真香(第一期)

你好&#xff0c;我是Martin。 我是就读于B站大学2020届的Martin同学&#xff0c;反正我学习计算机真的是全靠 B 站了。 我是个刷视频狂魔&#xff0c;B站收藏夹里也收藏了很多编程类视频&#xff0c; 比如C/C、Go语言、操作系统、数据结构和算法、计算机网络、数据库、Pyth…

Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果

Pytorch中张量矩阵乘法函数使用说明 1 torch.mm() 函数1.1 torch.mm() 函数定义及参数1.2 torch.bmm() 官方示例 2 torch.bmm() 函数2.1 torch.bmm() 函数定义及参数2.2 torch.bmm() 官方示例 3 torch.matmul() 函数3.1 torch.matmul() 函数定义及参数3.2 torch.matmul() 规则约…