用代码实现矩阵加法问题
最近在Codewar上看到一个有趣的问题是关于矩阵的加法问题.
题目中, 我所要编写的函数的传入参数是两个向量, 而且此向量是嵌套的, 具体内容如下:
std::vector<std::vector<int> > matrixAddition(std::vector<std::vector<int> > a,std::vector<std::vector<int> > b)
可以发现传入参数的形式:
std::vector<std::vector<int>> a
利用了两层vector来实现矩阵的表示. 由于本人萌新,对于vector类的操作不熟悉, 所以为了研究如何对其操作, 又是一次头秃的经历…
先看题目的内容
要求
Write a function that accepts two square matrices (N x N two dimensional arrays), and return the sum of the two. Both matrices being passed into the function will be of size N x N (square), containing only integers.
How to sum two matrices:
Take each cell [n][m] from the first matrix, and add it with the same [n][m] cell from the second matrix. This will be cell [n][m] of the solution matrix.
样例
matrixAddition(
[ [1, 2, 3],
[3, 2, 1],
[1, 1, 1] ],
// +
[ [2, 2, 1],
[3, 2, 3],
[1, 1, 3] ] )
// returns:
[ [3, 4, 4],
[6, 4, 4],
[2, 2, 4] ]
我的头秃探索中…
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector<int>> a = {{1,2,3},{4,5,6},{7,8,9}};
cout << a.size() << endl; //通过.size来测两数组大小(这里可以理解为矩阵有多少列)
return 0;
}
这里显示的结果就是3,就是显示矩阵有多少列;
那如何实现看矩阵有多少行呢?
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector<int>> a = {{1,2,3},{4,5,6,7},{8,9,0}};
cout << a[1].size() << endl;
}
我们可以发现, 我们可以用下标来表示vector中的vector, 这里第二行有四个元素,可以说不是矩阵了, 但为了方便演示区分, 这样写. 可以看出输出值为4,说明第二行有四个元素.
而我们要如何把这个二维数组中的每个元素遍历出来呢?
自己懒得打了: 引用一下大佬的文章
1.通过下标方式获取
int a[6]={1,2,3,4,5,6};
vector<int>b(a,a+4);
for(int i=0;i<=b.size()-1;++i){cout<<b[i]<<endl;}
2.通过迭代器方式读取
int a[6]={1,2,3,4,5,6};
vector<int>b(a,a+4);
for(vector<int>::iterator it=b.begin();it!=b.end();it++){cout<<*it<<" ";}
————————————————
版权声明:本文为优快云博主「刘同学_0116」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41743247/article/details/90635931
而对于二维数组,则可以用嵌套的for循环+二重下标实现.这里不用过多阐释.
不过大佬还说了一点也值得注意,就是vector下标只能访问已经存在的元素
也就是说,但vector里面还没有初值的时候: 如下例:
vector<int>a ;
for(int i=0;i<10;++i)
a[i]=i;
cout << a[5] << endl;
程序的编译不会报错,但程序最终会无法执行(再次感受到C++深深的恶意)
如果要成功的话,可以使用初始化:
vector<int>a(10,0); //初始化为10个元素,每个元素的值为0
for(int i=0;i<10;++i)
a[i]=i;
cout << a[5] << endl;
了解了这些,对于解决矩阵加法之类的问题基本上就够用了
之后关于vector的操作可以放在以后的文章中写;
现在就是开始解决问题了
不过有一个疑问没有解决:
std::vector<std::vector<int> > matrixAddition(std::vector<std::vector<int> > a,std::vector<std::vector<int> > b){
int n = a.size();
std::vector<std::vector<int>> result;
for ( int i = 0 ; i < n ; i++ )
{
for ( int j = 0 ; j < n ; j++ )
{
result[i].push_back( a[i][j] + b[i][j] );
}
}
return result;
// your code here
}
我这样做貌似是不可以的,不知道是出现啦什么问题;
等待大佬帮忙解答
那就换一个思路:
std::vector<std::vector<int> > matrixAddition(std::vector<std::vector<int> > a,std::vector<std::vector<int> > b){
int n = a.size();
std::vector<std::vector<int>> result(n,std::vector<int>(n,0));
//直接利用初始化,初始这个数组(不过这个初始化也很有意思,你品,你细品)
for ( int i = 0 ; i < n ; i++ )
{
for ( int j = 0 ; j < n ; j++ )
{
result[i][j] = a[i][j] + b[i][j] ;
}
}
return result;
// your code here
}
最后就是喜闻乐见的测试通过啦.
结尾
大概今天的刷题体验就是这样了,虽然没有为大家整理什么系统的知识(系统知识完全可以看刘同学大佬啊喂!) 不过如果大家能与我一起每天一刷,应该还是对大家的实战水平有所帮助吧…(没有底气)

本文探讨了在C++中实现矩阵加法的过程,详细介绍了如何使用std::vector表示矩阵,以及如何遍历和操作矩阵中的元素。通过具体示例,展示了如何正确地将两个矩阵相加,并分享了在开发过程中的常见陷阱和解决方法。

被折叠的 条评论
为什么被折叠?



