C++二维数组arr[3][4]与arr(3, vector<int>(4))的差异

int arr[3][4] 和 vector<vector<int>> arr(3, vector<int>(4)) 都是用于存储二维数组的数据结构,但它们之间有以下几个差异:

1. 内存管理:int arr[3][4] 是一个静态数组,它在编译时就分配了连续的内存空间,大小不可变。而 vector<vector<int>> arr(3, vector<int>(4)) 是一个动态数组,它在运行时分配内存,可以动态地调整大小。
2. 初始化:int arr[3][4] 在定义时可以使用初始化列表来初始化元素,而 vector<vector<int>> arr(3, vector<int>(4)) 在创建时可以通过构造函数来初始化元素。
3. 访问元素:int arr[3][4] 可以使用下标运算符直接访问元素,而 vector<vector<int>> arr(3, vector<int>(4)) 需要使用两个下标运算符来访问元素,例如 arr[i][j]。
4. 内存布局:int arr[3][4] 在内存中是连续存储的,因此可以使用指针运算来访问元素。而 vector<vector<int>> arr(3, vector<int>(4)) 在内存中是分散存储的,每个一维数组都是一个独立的内存块,因此不能使用指针运算来访问元素。
5. 效率:int arr[3][4] 由于是静态数组,因此访问元素的效率较高。而 vector<vector<int>> arr(3, vector<int>(4)) 由于是动态数组,因此在插入和删除元素时需要进行内存分配和释放,因此效率较低。

总之,这两种数据结构各有优缺点,在具体应用中需要根据实际情况选择合适的数据结构。如果需要存储大小固定的二维数组,可以使用 int arr[3][4]。如果需要存储大小可变的二维数组,可以使用 vector<vector<int>> arr(3, vector<int>(4))。

#include <iostream>
#include <vector>
using namespace std;int main() {// 创建一个3行4列的二维数组vector<vector<int>> arr(3, vector<int>(4));// 为二维数组赋值for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {arr[i][j] = i * 4 + j;}}// 输出二维数组for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {cout << arr[i][j] << " ";}cout << endl;}int arr2[3][4];// 为二维数组赋值for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {arr2[i][j] = i * 4 + j;}}// 输出二维数组for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {cout << arr2[i][j] << " ";}cout << endl;}return 0;
}

--

C++ 标准库中的 `vector` 容器类是一个动态数组,它提供了一系列方法用于管理元素。以下是 `vector` 容器类的一些基本方法:

1. `vector<T> v;` 创建一个空的 `vector` 容器,其中 `T` 是元素的数据类型。
2. `vector<T> v(n);` 创建一个包含 `n` 个元素的 `vector` 容器,每个元素的值都是 `T` 的默认值。
3. `vector<T> v(n, val);` 创建一个包含 `n` 个元素的 `vector` 容器,每个元素的值都是 `val`。

4. `v.push_back(val);` 在 `vector` 容器的末尾添加一个值为 `val` 的元素。
5. `v.pop_back();` 删除 `vector` 容器的末尾元素。
6. `v.size();` 返回 `vector` 容器中元素的个数。
7. `v.empty();` 如果 `vector` 容器为空,则返回 `true`,否则返回 `false`。
8. `v.front();` 返回 `vector` 容器中第一个元素的引用。
9. `v.back();` 返回 `vector` 容器中最后一个元素的引用。
10. `v.clear();` 清空 `vector` 容器中的所有元素。
11. `v.insert(pos, val);` 在 `vector` 容器中的 `pos` 位置插入一个值为 `val` 的元素。
12. `v.erase(pos);` 删除 `vector` 容器中的 `pos` 位置的元素。
13. `v.at(i);` 返回 `vector` 容器中下标为 `i` 的元素的引用。
14. `v[i];` 返回 `vector` 容器中下标为 `i` 的元素的引用。
15. `v.begin();` 返回一个迭代器,指向 `vector` 容器中的第一个元素。
16. `v.end();` 返回一个迭代器,指向 `vector` 容器中的最后一个元素的下一个位置。

这些方法可以用于在 `vector` 容器中添加、删除、访问和遍历元素。需要注意的是,在使用这些方法时需要确保 `vector` 容器中有足够的元素,否则可能会导致程序崩溃或产生未定义行为。

#include <iostream>
#include <vector>using namespace std;int main() {// 创建一个空的 vector 容器vector<int> v;// 在 vector 容器的末尾添加元素v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(5);v.push_back(6);// 访问 vector 容器中的元素cout << "The first element is " << v.front() << endl;cout << "The last element is " << v.back() << endl;cout << "The size of the vector is " << v.size() << endl;// 使用下标访问元素v[1] = 10;cout << "The second element is " << v[1] << endl;// 使用迭代器访问元素vector<int>::iterator it = v.begin();while (it != v.end()) {cout << *it << " ";it++;}cout << endl;// 在 vector 容器中的指定位置插入元素v.insert(v.begin() + 1, 5);cout << "After inserting 5, the vector is: ";for (std::vector<int>::size_type i = 0; i < v.size(); i++) {cout << v[i] << " ";}cout << endl;// 删除 vector 容器中的元素v.erase(v.begin() + 1);cout << "After erasing the second element, the vector is: ";for (std::vector<int>::size_type i = 0; i < v.size(); i++) {cout << v[i] << " ";}cout << endl;// 清空 vector 容器v.clear();cout << "After clearing the vector, the size is " << v.size() << endl;return 0;
}

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

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

相关文章

flask+uwsgi+nginx+cerbot配置

配置步骤 安装flask和uwsgi pip install Flask uwsgi 创建一个简单的flask应用&#xff08;app.py&#xff09;或者是自己的flask项目 from flask import Flask app Flask(__name__)app.route(/) def hello_world():return Hello, World! 配置uwsgi&#xff0c;这里我给出…

C# Solidworks二次开发:枚举应用实战(第五讲)

大家好&#xff0c;今天是我们枚举应用的第五讲。 下面是今天要介绍的枚举&#xff1a; &#xff08;1&#xff09;第一个枚举为swConStraintType_e&#xff0c;这个枚举为草图约束&#xff0c;下面是官方的具体枚举值&#xff1a; MemberDescriptionswConstraintType_ALONG…

【AI】探索 Prompt:如何与 ChatGPT 对话

工作中 忙的太久 不觉间 已三十个年头 挑剔着 轮换着 你再三选择 那么寒冬后 炎夏前 谁会给你春一样的爱恋 日落后 最美的 时光已溜走 日落后 最美的 已溜走 &#x1f3b5; 赵雷《三十岁的女人》 在人工智能和用户交互领域&#xff0c;“prompt” 是一个至关重要的概念。它不仅…

SQLite尽如此轻量

众所周知&#xff0c;SQLite是个轻量级数据库&#xff0c;适用于中小型服务应用等&#xff0c;在我真正使用的时候才发现&#xff0c;它虽然轻量&#xff0c;但不知道它却如此轻量。 下载 官网&#xff1a; SQLite Download Page 安装 1、将下载好的两个压缩包同时解压到一个…

十大排序算法之——堆排序算法(Java实现)及思路讲解

堆排序是一种非常有效的排序算法&#xff0c;它利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构&#xff0c;并同时满足堆积的性质&#xff1a;即子节点的键值或索引总是小于&#xff08;或者大于&#xff09;它的父节点。堆排序可以分为两个主要部分&a…

【PG-2】PostgreSQL存储管理器

2. PostgreSQL存储管理器 src/backend/storage (base) torrestorresの机革:~/codes/postgresql-16.2/src/backend/storage$ ls Makefile buffer file freespace ipc large_object lmgr meson.build objfiles.txt page smgr sync存储管理器—smgr 通用存储管理器 …

航拍图像拼接 | 使用C++实现的无人机航拍图像拼接

项目应用场景 面向无人机航拍图像拼接场景&#xff0c;项目使用 C 实现&#xff0c;使用 harris 角点查找特征点 非极大值抑制&#xff0c;由于航拍图像没有严重的尺度旋转变化&#xff0c;使用了 berief 描述子&#xff0c;然后使用 RANSAC 求 H&#xff0c;最后进行图像拼接…

linux 中 make 和 gmake的关系

1. 关系 gmake特指GNU make。 make是指系统默认的make实现; 在大多数Linux发行版中&#xff0c;make就是GNU make&#xff0c;但是在其他unix中&#xff0c;gmake可以指代make的某些其他实现&#xff0c;例如BSD make或各种商业unix的make实现。 gmake是GNU Make的缩写。 Linux…

【算法一则】【贪心】数组中的数可以拼装成的最大数

题目 给定一组非负整数 nums&#xff0c;重新排列每个数的顺序&#xff08;每个数不可拆分&#xff09;使之组成一个最大的整数。 注意&#xff1a;输出结果可能非常大&#xff0c;所以你需要返回一个字符串而不是整数。 示例 1&#xff1a; 输入&#xff1a;nums [10,2] …

【UnityRPG游戏制作】RPG项目的背包系统商城系统和BOSS大界面

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

二分查找-在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 输入&#xf…

程序链接步骤2:重定位

一、链接步骤 链接步骤1“符号解析”&#xff1a; 将符号引用和符号定义建立关联后&#xff1b; 链接步骤2“重定位”&#xff1a; 将引用符号的地址“重定位”为相关联的符号定义的地址。 二、原文链接&#xff1a;https://www.jianshu.com/p/7d13ec4735ba 符号解析完成后&…

ZooKeeper 搭建详细步骤之二(伪集群模式)

ZooKeeper 搭建详细步骤之一&#xff08;单机模式&#xff09; ZooKeeper 及相关概念简介 伪集群搭建 ZooKeeper 伪集群是指在一个单一的物理或虚拟机环境中模拟出一个由多个 ZooKeeper 节点构成的集群。尽管这些节点实际上运行在同一台机器上&#xff0c;但它们通过配置不同的…

字节秋招高频算法汇总(高级篇)

更多大厂面试内容可见 -> http://11come.cn 字节秋招高频算法汇总 接下来讲一下 字节秋招 中的高频算法题&#xff0c;分为三个部分&#xff1a; 基础篇 、 中级篇 、 进阶篇 目的就是为了应对秋招中的算法题&#xff0c;其实过算法题的诀窍就在于 理解的基础上 背会 看…

【ARMv9 DSU-120 系列 5 -- CHI Interface】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 DSU-120 CHI BUSAddress Target Groups配置步骤映射和管理Hashing for CHI transaction distribution散列过程和地址目标组识别散列函数定义两个地址目标组的散列四个地址目标组的散列八个地址目标组的散列架构框图

与Apollo共创生态:我和Apollo七周年大会的心路历程

一、写在前面 前几天观看了Apollo七周年大会&#xff0c;给我带来了超多的惊喜&#xff0c;博主想将这份惊喜分享给大家&#xff01; 二、Apollo开放平台 Apollo开放平台秉承其核心理念——开放能力、共享资源、加速创新、持续共赢&#xff0c;致力于推动自动驾驶技术的革新…

《HCIP-openEuler实验指导手册》1.2Apache主页面配置

一、配置服务器监听IP及端口 注释主配置文件“监听IP及端口”部分 cd /etc/httpd/conf cp httpd.conf httpd.conf.bak vim httpd.conf可以在普通模式下搜索Listen关键字 :/Listen按n键继续向后搜索 在/etc/httpd/conf.d中新建子配置文件port.conf&#xff1a; touch /etc…

新质生产力的内涵

新质生产力是以科技创新为先导&#xff0c;摆脱传统增长路径、符合高质量发展要求的生产力跃迁新形态&#xff0c;是数字时代更具有融合性、更体现新内涵的生产力组合。如果说传统生产力是人类已经掌握并正在使用的生产力&#xff0c;那么&#xff0c;新质生产力就是以大数据、…

Linux系统及工具的使用

​ Linux的版本系列与划分: Redhat与Debian系介绍(Linux各种发行版本概述)_酷炫人笨笨熊-CSDN博客_redhat和debian的区别 ubuntu下 1.打开 .bashrc文件&#xff0c; 在最后面添加下面一句话 Ubuntu 22.04下安装配置rime五笔输入法_ubuntu 22.04 五笔_繁星间漫步的博客-CSDN博客…

观成科技:蔓灵花组织加密通信研究分析总结

1.概述 蔓灵花&#xff0c;又名"Bitter"&#xff0c;常对南亚周边及孟加拉湾海域的相关国家发起网络攻击&#xff0c;主要针对巴基斯坦和中国两国。其攻击目标主要包括政府部门、核工业、能源、国防、军工、船舶工业、航空工业以及海运等行业&#xff0c;其主要意图…