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;
}
相关文章
|
4月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
631 5
|
12月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
271 9
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
279 5
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
211 1
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
282 2
|
7月前
|
测试技术 PHP 开发者
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
|
11月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
822 1
Java 中数组Array和列表List的转换
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
300 67
|
11月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章

  • 1
    PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
    210
  • 2
    Java 中数组Array和列表List的转换
    822
  • 3
    JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
    653
  • 4
    通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式、聚合统计、处理树结构数据和性能优化,reduce()的使用详解(附实际应用代码)
    1424
  • 5
    通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
    537
  • 6
    通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
    351
  • 7
    多维数组操作,不要再用遍历循环foreach了!来试试数组展平的小妙招!array.flat()用法与array.flatMap() 用法及二者差异详解
    234
  • 8
    别再用双层遍历循环来做新旧数组对比,寻找新增元素了!使用array.includes和Set来提升代码可读性
    236
  • 9
    Array.forEach实战详解:简化循环与增强代码可读性;Array.forEach怎么用;面对大量数据时怎么提高Array.forEach的性能
    151
  • 10
    深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
    634