STL容器篇之array与vector(学习篇)(上)

简介: STL容器篇之array与vector(学习篇)

array

简单介绍

array 是STL 中一个容器, 是一个定值数组

相当于C语言中 array[5].

在C++中, 使用容器都要使用想对应的头文件

例如:

使用array这个容器,就要使用 这个头文件

#include<vector>

创建对象以及赋值

二种方法:

第一种:array<数据类型, 大小> 对象;

赋值 : 例如:array<int , 3> = {0, 2, 4};

第二种: 用new

array<数据类型, 大小> * 变量名称 = new array<数据类型, 大小>;

赋值: (*变量名称)[数组下标] = 值

例如 : *arr3[0] = “温柔了岁月”

//array 2种方法 创建对象
  //第一种 array<数据类型, 大小> 对象
  array<int, 3> arr1;
  //第一种直接赋初值  array<数据类型, 大小> 对象 = {0, 2}可以直接赋值
  array<int, 3> arr2 = { 0, 2 };
  //第二种:用new
  array<string, 3>* arr3 = new array<string, 3>;
  //赋值操作
  (* arr3)[0] = "温柔了岁月";
   delete arr3;

通常使用第一种,第二种赋值方式相对于第一种过于麻烦

array中常用内置函数介绍

使用方法: 对象.函数

1.size(), 计算大小

2.empty(), 判断是否为空

3.begin(), 可以指向array数组的第一个元素,

注意:也可以表示array数组中的第一个元素

4.end(), 指向array数组中的最后一个元素,

注意:不表示array数组中的最后一个元素

5. front(), 第一个元素

6. back(), 最后一个元素

7. at(), 可以访问array数组中的数据**,注意需要加参数,array数组的下标**

这些内置函数, 有的后面会多次涉及最好记住

// STL中内置的函数 size() 计算大小
  cout << arr2.size() << endl;
  cout << arr3->size() << endl;
  //C++中empty ()函数的作用是用来判断容器是否为空 
  //empty ()函数返回值为true,说明容器为空 empty ()函数返回值为false,说明容器不为空
  cout << arr1.empty() << endl;

array数组的访问(正向遍历)

第一种:简单的for循环,用 cout 遍历打印不过array的大小用size计算

第二种:也是for循环,与第一种不同的是, 用array的内置函数at,来打印

第三种:则是遍历容器常用的方法

用迭代器的方法(三种)

这里讲解第一种,也是用的最多的

首先

1.array<数据类型, 大小> ::(作用域) iterator(迭代器) 对象 = arr2.begin(),指向 第一个 元素

2.array<数据类型, 大小> ::(作用域) iterator(迭代器) 对象 = arr2.end(),指向 最后一个元素

3.for循环挨个打印,直到到最后一个元素

迭代器你可以变相的理解为指针,代表着地址
所以 * arr2.begin() 代表着值

//array的访问
  //第一种 cout
  //for (int i = 0; i < arr2.size(); i++)
  //{
  //  cout << arr2[i] << endl;
  //}
  第二种 内置函数at()
  //for (int i = 0; i < arr2.size(); i++)
  //{
  //  cout << arr2.at(i) << endl;
  //}
  //运用迭代器  三种方法
  //第一种(常用)
  for (array<int, 3> ::iterator it = arr2.begin(); it != arr2.end(); it++)
  {
    cout << *it << endl;
  }
   //第二种方法
  array<int, 3> ::iterator itBegin = arr2.begin();
  array<int, 3> ::iterator itEnd = arr2.end();
  while (itBegin != itEnd)
  {
    cout << *itBegin << endl;
    itBegin++;
  }
  //第三种 each_for()算法  ,这里暂不介绍, 后续讲算法的时候介绍

指针形式遍历

for (int i = 0; i < arr3->size(); i++)
  {
    cout << arr3->at(i) << endl;
  }

逆向遍历(反向迭代器)

正向迭代器:iterator

反向迭代器 reverse_iterator

rbegin() 指向array中最后一个元素

rend()指向array中第一个元素

for (array<int, 3> ::reverse_iterator it = arr2.rbegin(); it != arr2.rend(); it++)
  {
    cout << *it << endl;
  }

*注意:不能用正向迭代器,反着写,逆向打印array中的元素
因为 arr2.end() 并不代表 array中最后一个元素

如果这样操作,将会出现如下错误

array的嵌套

array本身是一个定长的数组,

嵌套一次,便是定长的二维数组,

嵌套二次,便是定长的三位数组。

这里需要注意的是如何打印

#include<iostream>
#include<array>
using namespace std;
int main()
{
  array<array<int, 4>, 3> date;  //表示 3X4的二维数组
  for (int i = 0; i < date.size(); i++) // date.size()表示行的大小
  {
    for (int j = 0; j < date[i].size(); j++)  // date[i].size(),表示列的大小
    {
      date[i][j] = i;     //随便赋的值
      cout << date[i][j] << " ";
    }
    cout << endl;
  }
  array<array<array<int, 4>, 4>, 4>;     //4X4X4的三维数组,可以无限嵌套
  system("pause");
  return 0;
}
相关文章
|
1月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
50 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
2月前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)
本文介绍了Twaver HTML5中的页管理容器(TabBox)和选中模型(SelectionModel)。文章解释了如何使用TabBox来管理Tab页,并通过示例代码展示了SelectionModel的多种功能,包括追加选中元素、设置选中元素、选中所有元素、移除元素选中状态、清除所有选中状态等。此外,还介绍了如何监听选中状态的变化事件以及如何设置不同的选中模式,如多选、单选和不可选。
36 2
Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)
|
1月前
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
36 1
|
1月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
54 5
|
1月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
54 2
|
2月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
1月前
|
Linux 应用服务中间件 Shell
docker学习--docker容器镜像常用命令大全(简)
本文档详细介绍了Docker中的镜像命令与容器管理命令。镜像命令部分涵盖了镜像搜索、下载、上传等操作;容器管理命令则包括了容器的创建、启动、停止、删除及日志查看等功能。通过具体示例,帮助用户更好地理解和使用Docker相关命令。
158 0
|
1月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--k8s集群使用容器镜像仓库Harbor
本文介绍了在CentOS 7.9环境下部署Harbor容器镜像仓库,并将其集成到Kubernetes集群的过程。环境中包含一台Master节点和两台Node节点,均已部署好K8s集群。首先详细讲述了在Harbor节点上安装Docker和docker-compose,接着通过下载Harbor离线安装包并配置相关参数完成Harbor的部署。随后介绍了如何通过secret和serviceaccount两种方式让Kubernetes集群使用Harbor作为镜像仓库,包括创建secret、配置节点、上传镜像以及创建Pod等步骤。最后验证了Pod能否成功从Harbor拉取镜像运行。
111 0
|
1月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。