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

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

victor(动态数组)

简单介绍

数组的大小是动态的,你想要多大,系统就会给你多大

当然容器, 也需要使用这个的头文件

#include<vector>

创建方式

vector的创建方式有很多

1.不带长度的创建

第一种情况:不赋初值

这种情况的创建,需要注意的是不能利用数组下标来进行操作

错误案例:

//创建方式
  //1. 不带长度的构建,
    //如果没有进行赋初值, 不能通过数组下标进行访问元素
  vector<int> name;
  name[0] = 1; //错误案例

第二种情况: 赋初值, 赋初值可以通过数组下标来操作(系统会自动给出数组的大小), 但不能越界进行操作

案例:

//错误案例
vector<int>name2 = {1, 2}; //系统自己自动给出数组大小为2
name2[3] = 1;  //越界进行操作, 程序中断

2.带长度的构建

(可以通过数组下标访问,但肯定不能越界)

//2.带长度的构建
  //创建方式:vector<数据类型> 名称(数组的大小)
  vector<int> name2(2);
  name2[0] = 1;  //正确案例, 在数组长度的范围之类
  name2[3] = 3;  //错误案例, 超出了数组的长度

3.带自动增长功能的是在成员函数中实现的

利用 push_back(尾部插入, 也就是最后面插入)

像前面几种情况, 如果越界或者无法通过数组下标来操作的话,都可以通过push_back()函数来进行插入

案例:

push_back(插入的数据);

name1.push_back(1);
name2.push_back(3)

遍历方式(这里介绍一种方便的新式for循环)

第一种:根据C++11的特性

这里有一种新式的for循环

这种新式的for循环,相对于,迭代器的方法更加的简洁,
建议使用这种,当然前面array的遍历也可以用这个,

for (auto &v: name2) //取地址
  {
    cout << v << endl; //将name2中的元素从第一个挨个打印
  }

第二种:迭代器的方法

//迭代器的方法打印
  for (vector<int>::iterator it = name2.begin(); it != name2.end(); it++)
  {
    cout << *it << endl;
  }

逆向访问

//逆向打印
  for (vector<int> ::reverse_iterator rit = name2.rbegin(); rit != name2.rend(); rit++)
  {
    cout << *rit << endl;
  }

数组遍历的小总结

通过array和vector的遍历学习,相信你已经有所体会

遍历的方式:一般采用

1.新式的for循环
2.迭代器的方法

3.或者使用size()成员函数,挨个遍历打印

逆向遍历

反向迭代器

访问第一个元素

//1.可以通过成员函数begin()和front()
cout << name2.front() << * name2.begin();
//2.也可以通过 c成员函数at(0)
cout << name2.at(0) << endl; 
//注意不能使用rend()函数去访问,程序会中断

访问最后一个元素

1.成员函数 back()
//同样注意:注意不能使用rend()函数去访问,程序会中断
cout << name2.back();
2.反向迭代器 rbegin();
cout << *name2.rbegin()<< endl;
3.
cout << name2.at(name2.size()- 1) << endl;
4.
cout << *(name2.end() - 1) << endl;

vector的嵌套

vector本身是一个动态的数组,

嵌套一次,便是动态的二维数组,

嵌套二次,便是动态的三位数组。

这里使用了随机数的方法,实现一个不等长的二维数组

如果对随机数不太熟悉的话可以看下,当然要加头文件(这里只是部分代码)

include<time.h>
vector<vector<int>> date; //一个动态的二维数组
  srand((unsigned int)time(NULL)); //创建随机种子
  //利用随机数, 实现一个不等长的二维数组
  int len = rand() % 5 + 1;
  for (int i = 0; i < 3; i++)
  {
    vector<int> name;
    for (int j = 0; j < len; j++)
    {
      name.push_back(j);
    }
    date.push_back(name);
  }
  for (int i = 0; i < date.size(); i++)
  {
    for (int j = 0; j < date[i].size(); j++)
    {
      cout << date[i][j] << " ";
    }
    cout << endl;
  }

vector与array的相互嵌套

vector与array的相互嵌套也很简单,

弄清楚了array的嵌套和vector的嵌套

他们的相互嵌套就很好理解

只需清楚,是谁嵌套谁

//array与vector 可以相互嵌套
  vector<array<int, 3>> arr1;
  arr1.push_back(array<int, 3>{0,4});
  array<vector<int>, 3> arr2;
  arr2[0] = vector<int>{ 1, 2 };



相关文章
|
7月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
829 6
|
存储 缓存 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 容器,解锁高效编程的秘密武器
317 9
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
1292 8
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
340 5
|
存储 对象存储 C++
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
287 1
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
327 2
|
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拉取镜像运行。
2942 0
|
Linux 应用服务中间件 Shell
docker学习--docker容器镜像常用命令大全(简)
本文档详细介绍了Docker中的镜像命令与容器管理命令。镜像命令部分涵盖了镜像搜索、下载、上传等操作;容器管理命令则包括了容器的创建、启动、停止、删除及日志查看等功能。通过具体示例,帮助用户更好地理解和使用Docker相关命令。
1005 0

热门文章

最新文章