array 容器是 C++ 11 标准中新增的序列式容器,简单地理解,它就是在 C++ 普通数组的基础上,添加了一些成员函数和全局函数。在使用上,它比普通数组更安全,且效率并没有因此变差。
与数组一样,其底层存储空间是连续的。
array 和其它容器不同,array 容器的大小是固定的,无法动态的扩展或收缩,这也就意味着,在使用该容器的过程无法借由增加或移除元素而改变其大小,它只允许访问或者替换存储的元素。
1.1 T 代表 array 中元素的类型
1.2 N 代表 array 中元素的个数
- namespace std{
- template <typename T, size_t N>
- class array;
- }
- // main.cpp
- #include
- #include
- #include
- #include
-
-
- template<typename T, size_t N>
- void printArray(std::array
& arr) - {
- // for(int i=0; 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;
- }
- // may_array.h
-
- #include
- #include
-
- 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
- #include
- #include"my_array.h"
-
- template <typename V, int N>
- void print(my_array
& arr) - {
- for(int i=0; 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 << "-------" <
-
- for(auto iter = arr1.const_begin(); iter != arr1.const_end(); iter++)
- {
- std::cout << *iter << " ";
- }
- std::cout << "-------" <
-
-
- my_array
3> arr2 = {"aa", "bb", "cc"}; - for(auto iter = arr2.begin(); iter != arr2.end(); iter++)
- {
- std::cout << *iter << " ";
- }
- std::cout << "-------" <
-
- for(auto iter = arr2.const_begin(); iter != arr2.const_end(); iter++)
- {
- std::cout << *iter << " ";
- }
- std::cout << "-------" <
-
- return 0;
- }
-
参考文档:array 类(C++ 标准库) | Microsoft LearnC++ array(STL array)容器用法详解 (biancheng.net)
-
相关阅读:
代码混淆不再愁:一篇掌握核心技巧
深拷贝和浅拷贝的区别
第四十五章 命名空间和数据库 - 数据库基础知识
[36c3 2019]includer
sublime text 一些常用插件
Java面向对象(上)
硬件开发趋势与技术探索
教育小程序的性能优化:从前端到后端的综合提升策略
Javaweb三大组件知识点记录
如何通过系统对MySQL进行“体检”
-
原文地址:https://blog.csdn.net/qq_33775774/article/details/132795230
-
最新文章
-
C++11 线程同步接口std::condition_variable和std::future的简单使用
Go runtime 调度器精讲(十一):总览全局
Spring框架漏洞总结
Angular 18+ 高级教程 – 国际化 Internationalization i18n
基于Tauri2+Vue3搭建桌面端程序|tauri2+vite5多窗口|消息提醒|托盘闪烁
ComfyUI 基础教程(五) —— 应用 IP-Adapter 实现图像风格迁移
网络空间的“边水往事”?针对华语黑产及用户进行攻击的 APT-K-UN3 活动分析
伪装“黑神话悟空修改器”传播木马的活动分析
全球蓝屏后,微软决定将安全踢出Windows内核
Java读取寄存器数据的方法