C++笔记之初始化二维矩阵的方法

C++笔记之初始化二维矩阵的方法

—— 2023年5月20日 上海


code review!
在这里插入图片描述

文章目录

  • C++笔记之初始化二维矩阵的方法
    • 一.常见方法
      • 1. 使用数组
      • 2. 使用向量
      • 3. 使用数组的动态分配
      • 4. 使用嵌套的 std::vector 并使用resize方法
      • 5. 初始化固定大小的 std::array
    • 二.C++中使用vector初始化二维矩阵的所有方法
      • 1. 列表初始化
      • 2. 使用 `resize` 方法——重要:
      • 3. 使用 `push_back` 方法:
      • 4. 使用 `emplace_back` 方法:
      • 5. 使用 `assign` 方法——重要:
      • 6. 使用 `insert` 方法:
    • 三.根据一个已有的二维矩阵使用std::vector来初始化一个新的二维矩阵
      • 1. 使用拷贝构造函数——重要
      • 2. 使用赋值运算符——重要
      • 3. 使用 `assign` 方法
      • 4. 使用 `std::copy` 函数
      • 5. 使用 `std::copy_n` 函数
      • 6. 使用范围基础的 for 循环和 `push_back` 方法
    • 三.根据一个已有的二维矩阵使用std::vector来初始化一个新的同维度的,所有元素都为0的二维矩阵
      • 1. 使用 `resize` 方法和循环——重要
      • 2. 使用 `resize` 方法和 `std::transform` 函数
      • 3. 使用嵌套的 `resize` 方法

一.常见方法

1. 使用数组

你可以使用二维数组来初始化一个矩阵:

int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

2. 使用向量

你也可以使用std::vector来创建和初始化二维矩阵:

std::vector<std::vector<int>> matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

3. 使用数组的动态分配

如果你需要动态地创建矩阵(例如,其尺寸在运行时确定),可以使用new操作符:

int rows = 3;
int cols = 3;
int** matrix = new int*[rows];
for(int i = 0; i < rows; ++i)matrix[i] = new int[cols];

然后你可以使用循环来初始化这个矩阵。

4. 使用嵌套的 std::vector 并使用resize方法

如果你需要动态地创建和初始化矩阵,但你更喜欢使用std::vector,你可以这样做:

int rows = 3;
int cols = 3;
std::vector<std::vector<int>> matrix;
matrix.resize(rows, std::vector<int>(cols, 0)); // 这将创建一个3x3的矩阵,并用0填充

5. 初始化固定大小的 std::array

对于固定大小的二维矩阵,可以使用std::array

std::array<std::array<int, 3>, 3> matrix = { { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} } };

在这里插入图片描述

二.C++中使用vector初始化二维矩阵的所有方法

在 C++ 中,使用 std::vector 来初始化二维矩阵是常见的做法,因为它提供了灵活的大小和方便的内存管理。以下是一些方法:

1. 列表初始化

你可以在声明时就初始化 std::vector

std::vector<std::vector<int>> matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

2. 使用 resize 方法——重要:

如果你已经知道矩阵的大小,但要稍后填充值,可以使用 resize 方法:

std::vector<std::vector<int>> matrix;
matrix.resize(rows, std::vector<int>(cols));

3. 使用 push_back 方法:

你也可以创建一个空的 std::vector,然后使用 push_back 方法来添加行:

std::vector<std::vector<int>> matrix;
for(int i = 0; i < rows; ++i) {std::vector<int> row;for(int j = 0; j < cols; ++j) {row.push_back(value);}matrix.push_back(row);
}

4. 使用 emplace_back 方法:

类似于 push_back,但 emplace_back 直接在原地构造新元素,通常效率更高:

std::vector<std::vector<int>> matrix;
for(int i = 0; i < rows; ++i) {matrix.emplace_back(std::vector<int>(cols, value));
}

5. 使用 assign 方法——重要:

assign 方法可以用来替换 std::vector 中的所有元素:

std::vector<std::vector<int>> matrix;
matrix.assign(rows, std::vector<int>(cols, value));

6. 使用 insert 方法:

insert 方法可以在 std::vector 的任何位置插入新元素:

std::vector<std::vector<int>> matrix;
for(int i = 0; i < rows; ++i) {matrix.insert(matrix.end(), std::vector<int>(cols, value));
}

注意,在这些例子中,rowscolsvalue 都是整数变量,分别表示矩阵的行数、列数和初始值。

三.根据一个已有的二维矩阵使用std::vector来初始化一个新的二维矩阵

在C++中,如果你已经有一个二维矩阵,你可以通过多种方式使用std::vector来初始化一个新的二维矩阵:

1. 使用拷贝构造函数——重要

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix(old_matrix);

2. 使用赋值运算符——重要

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix = old_matrix;

3. 使用 assign 方法

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix;
new_matrix.assign(old_matrix.begin(), old_matrix.end());

4. 使用 std::copy 函数

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix(old_matrix.size());
std::copy(old_matrix.begin(), old_matrix.end(), new_matrix.begin());

5. 使用 std::copy_n 函数

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix(old_matrix.size());
std::copy_n(old_matrix.begin(), old_matrix.size(), new_matrix.begin());

6. 使用范围基础的 for 循环和 push_back 方法

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix;
for (const auto &row : old_matrix) {new_matrix.push_back(row);
}

以上就是使用 std::vector 根据已有的二维矩阵初始化新的二维矩阵的一些方法。根据你的具体需求和优化考虑,你可能需要选择不同的方法。

三.根据一个已有的二维矩阵使用std::vector来初始化一个新的同维度的,所有元素都为0的二维矩阵

在C++中,如果你已经有一个二维矩阵,并希望创建一个新的、同维度的、所有元素都为0的二维矩阵,以下是一些方法:

1. 使用 resize 方法和循环——重要

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix;
for(const auto &row : old_matrix) {new_matrix.push_back(std::vector<int>(row.size(), 0));
}

2. 使用 resize 方法和 std::transform 函数

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix(old_matrix.size());
std::transform(old_matrix.begin(), old_matrix.end(), new_matrix.begin(), [](const std::vector<int>& row) {return std::vector<int>(row.size(), 0);
});

3. 使用嵌套的 resize 方法

std::vector<std::vector<int>> old_matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> new_matrix;
new_matrix.resize(old_matrix.size());
for(size_t i = 0; i < old_matrix.size(); ++i) {new_matrix[i].resize(old_matrix[i].size(), 0);
}

在以上的所有例子中,old_matrix 是你已有的二维矩阵,new_matrix 是新创建的二维矩阵。所有的新矩阵元素都被初始化为0,并且新矩阵的尺寸与原矩阵相同。

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

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

相关文章

Django token 认证原理与实战

概述 cookie、session 与token 的区别 Cookie的作用 cookie的存储量很小&#xff0c;一般不超过4Kcookie并不会保存很多信息&#xff0c;一般用来存储登录状态cookie是以键值对进行表示的(keyvalue),例如nameli,表示cookie的名字是name,cookie携带的值是licookie的存储分为会…

蓝桥杯双周赛算法心得——摆玩具(分段的差不计入结果)

大家好&#xff0c;我是晴天学长&#xff0c;这是一道可以牢记的数学技巧题。 1) .摆玩具 2) .算法思路 1.创建一个Scanner对象以从用户读取输入。 2.从用户读取n和k的值&#xff0c;分别表示数组的大小和k的值。 3.创建一个大小为n的整数数组a&#xff0c;用于存储输入的数…

Django实现音乐网站 (22)

使用Python Django框架做一个音乐网站&#xff0c; 本篇音乐播放器功能完善&#xff1a;顺序播放、设置播放数、歌词滚动等功能。 目录 顺序播放 设置顺序播放 单曲播放数 添加路由 视图处理 模板处理 歌词滚动 视图内容返回修改 样式设置 模板内容 歌词滚动脚本 歌…

uniapp开发小程序—根据生日日期计算年龄 周岁

0、需求 在UniApp开发小程序中&#xff0c;将接口返回的出生日期转化为年龄&#xff1b;判断接口返回的年龄是否是周岁 可以使用JavaScript的日期处理方法来实现。 一、第一种方式&#xff08;示例代码&#xff09;&#xff1a; //javascript // 假设接口返回的年龄为生日的…

TCP通信实战案例-即时通信

即时通信是什么含义&#xff0c;要实现怎么样的设计&#xff1f; 即时通信&#xff0c;是指一个客户端的消息发出去&#xff0c;其他客户端可以接收到。 即时通信需要进行端口转发的设计思想。 服务端需要把在线的Socket管道存储起来。 一旦收到一个消息要推送给其他管道。…

Json字符串转换小工具

下载【免费】Json字符串格式化和压缩&#xff0c;支持数组元素的不换行且能转换成16进制资源-CSDN文库 推荐理由&#xff1a; 离线使用支持json字符串的数据格式化和压缩&#xff0c;如&#xff1a;图1支持数组元素的16进制转换&#xff0c;如&#xff1a;图2支持数组元素不换…

小主机折腾记18

这个月冲动消费了小两千块钱…… 1.880g5twr 由于四根2400t的内存条没有用出去&#xff0c;我又把它们装回了惠普的800g5twr&#xff1b; 看到pdd有400块钱的9350K&#xff0c;于是想着给他上一个9350k 在参考了pdd、咸鱼以及淘宝的价格后&#xff0c;我发现400块钱的9350k都…

Autojs 利用OpenCV识别棋子之天天象棋你马没了

本例子通过代码像你介绍利用OpenCV实现霍尔找圆的方法定位棋子位置 通过autojs脚本实现自动点击棋子 开源地址 https://github.com/Liberations/TtxqYourHorseIsGone/blob/master/main.js AutoXJs https://github.com/kkevsekk1/AutoX/releasesauto() //安卓版本高于Android 9…

Plex踩坑——plex web无法找到媒体服务器

现象&#xff1a;之前安装过plex server&#xff0c;然后卸载了。再次重装后&#xff0c;plex web无法找到媒体服务器。 原因&#xff1a;卸载plex server时需要手动将plex的注册表删除&#xff1a;HKEY_CURRENT_USER\Software\Plex, Inc. 原文链接Uninstall Plex Media Serve…

wf-docker集群搭建(未完结)

系列文章目录 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、redis集群二、mysql集群三、nacos集群1. 环境要求2. 拉取镜像2.1. 拉取镜像方式配置集群2.2. 自定义nacos镜像配置集群 3 自定义…

C语言 sizeof 函数内部进行计算

直接看代码 #include <stdio.h> int main() {int i 2;int j;j sizeof(i i);printf("i %d, j %d", i ,j);return 0; }执行结果&#xff1a; 可以看到 i的值一直是没有变的&#xff0c; j 是int类型下 sizeof占用的大小为 4个字节&#xff0c;不是i的 22…

NewStarCTF2023week4-More Fast(GC回收)

打开链接&#xff0c;存在很多个类&#xff0c;很明显是php反序列化漏洞利用&#xff0c;需要构造pop链 &#xff0c; 关于pop链构造的详细步骤教学&#xff0c;请参考我之前的博客&#xff0c;真的讲得很详细也容易理解&#xff1a; http://t.csdnimg.cn/wMYNB 如果你是刚接…

代碼隨想錄算法訓練營|第四十五天|1049. 最后一块石头的重量 II、494. 目标和、474.一和零。刷题心得(c++)

目录 讀題 1049. 最后一块石头的重量 II 自己看到题目的第一想法 看完代码随想录之后的想法 494. 目标和 自己看到题目的第一想法 看完代码随想录之后的想法 474.一和零 自己看到题目的第一想法 看完代码随想录之后的想法 1049. 最后一块石头的重量 II - 實作 思路 …

宏电5G RedCap工业智能网关获首个中国移动5G物联网开放实验室5G及轻量化产品能力认证

10月21日&#xff0c;2023世界物联网博览会——中国移动物联网开发者大会暨物联网产业论坛在无锡圆满举行。宏电股份参与中国移动5G物联网开放实验室5G及轻量化产品能力认证成果授牌仪式&#xff0c;并获得认证证书。 此次认证主要对产品功能、产品性能、RedCap网络兼容性进行测…

sw型材利用父子关系找最新特征

利用父子关系可以找到设计树最新的编辑

复习mysql中的事务

一个事务的开始和结尾必须是 start transaction | commit; rollback 事务特性 1.原子性&#xff1a;多个操作打包成一个整体&#xff0c;要么全部执行&#xff0c;要么一个都不执行。 不过这里的“一个都不执行”并不是真正的全不执行&#xff0c;只是看起来与没执行一样。…

js中循环判断找到满足条件的单项后结束循环

当选择的所有项中&#xff0c;如果有一项不满足条件则返回false&#xff0c;让业务逻辑停止&#xff0c;一般都是使用forEach循环&#xff0c;但是forEach循环有个弊端就是return不能跳出循环&#xff0c;所以这时候就需要使用for循环中的break来跳出循环。 下面是代码示例&am…

redis持久化之AOF(Append Only File)

1 : AOF 是什么 以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将redis执行过的所有写指令记录下来&#xff08;读操作不记 录&#xff09;&#xff0c;只允追加文件但不可改写文件&#xff0c;redis启动之初会读取该文件重新构造数据&#xff0c;…

hadoop集群搭建

hadoop有三种部署方式 1、Local (Standalone) Mode&#xff08;单机模式&#xff09; 数据存储在本地 2、Pseudo-Distributed Mode&#xff08;伪集群模式&#xff09; 数据存储在HDFS 3、Fully-Distributed Mode&#xff08;集群模式&#xff09; 集群部署&#xff0c;数据存储…

2.2.3 三层交换机实现VLAN之间的通信

实验2.2.3 三层交换机实现VLAN之间的通信 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.划分SW2A的VLAN&#xff0c;并分配接口。2.划分SW3A的VLAN&#xff0c;配置每个VLAN接口的IP地址。3.设计计算机的网关&#xff0c;实现不同VLAN之间和不同网络之间的通…