### Vector 实现矩阵运算 #### 知识点一:Vector 的基本概念与使用 - `vector` 是 C++ 标准库中的一个容器类,它提供了动态数组的功能,支持随机访问,可以在运行时动态地调整大小。 - `vector` 在内部通过连续的内存空间来存储数据,因此可以提供高效的随机访问性能。 #### 知识点二:初始化二维 Vector - 在 C++ 中,可以使用嵌套的 `vector` 来表示矩阵。例如,`vector<vector<int>> m(a, vector<int>(b));` 这行代码创建了一个二维 `vector`,表示一个矩阵。 - 这里的 `a` 表示矩阵的行数,而 `b` 表示矩阵的列数。该语句创建了一个 `a` 行 `b` 列的矩阵,并且初始化所有元素为 0。 - 每个 `vector<int>` 对象代表矩阵的一行,`vector<int>(b)` 创建了一个长度为 `b` 的 `vector`,并且使用默认构造函数初始化每个元素为 0。 #### 知识点三:矩阵的填充与操作 - **填充矩阵**:可以通过循环遍历的方式给矩阵赋值。例如,`k[i][j] = 10 * i + j;` 这行代码将每个元素设置为行号乘以 10 加上列号。 - **矩阵相加**:对于两个相同维度的矩阵,可以逐元素相加。如代码中 `m[i][j] += n[i][j];`,这表示将矩阵 `n` 的每个元素加到矩阵 `m` 的对应位置。 #### 知识点四:矩阵打印 - 打印矩阵通常使用嵌套循环。外层循环迭代每一行,内层循环迭代每行中的每一个元素。 - 例如,`cout << k[i][j] << " ";` 用于打印矩阵的每个元素,`cout << endl;` 用于在打印完一行后换行。 #### 知识点五:示例代码分析 - **主函数**:首先定义了矩阵的尺寸 `a` 和 `b`,然后创建了两个矩阵 `m` 和 `n`。接下来调用了 `input` 函数来填充矩阵 `n`。 - **填充函数**:`input` 函数接收一个二维 `vector` 并对其元素进行初始化,然后返回这个矩阵。 - **矩阵相加**:在 `main` 函数中,通过循环实现了矩阵 `n` 的每个元素与矩阵 `m` 相应位置上的元素相加的操作。 - **打印矩阵**:`print` 函数用于打印矩阵。它接收一个二维 `vector` 作为参数,并使用嵌套循环来打印每一行的元素。 #### 知识点六:深入理解 `vector` 的性能特点 - `vector` 在内部通过连续内存块来存储数据,这意味着它可以提供 O(1) 时间复杂度的随机访问性能。 - 当 `vector` 的容量不足以容纳更多的元素时,它会重新分配更大的内存块,并将原有数据复制过去。这个过程可能导致性能下降,尤其是在频繁添加元素的情况下。 - 为了提高性能,可以通过预先指定 `vector` 的容量来避免频繁的重新分配内存。 ### 总结 本篇文章介绍了如何使用 C++ 中的 `vector` 类来实现矩阵运算。通过嵌套 `vector` 的方式创建矩阵,不仅可以方便地初始化矩阵,还可以高效地进行矩阵的填充、相加等操作。此外,还讨论了 `vector` 的性能特点,帮助开发者更好地理解和应用这一强大的容器类。
vector< vector<int> > m(a, vector<int>(b));
这个语句中,标准vector创建了一个包含a个向量的向量,
其中每个向量中包含有b个整数。这a * b个元素中都保存
着默认值0。
用这种方式可以轻松地返回一个数组或矩阵。
************************************************************/
#include <iostream>
#include <vector>
using namespace std;
void print(const vector<vector<int> >&k)
{
for(int i = 0; i < k.size(); i++)
{
for(int j = 0; j < k[i].size(); j++)
cout << k[i][j] << " ";
cout << endl;
}
}
vector<vector<int> > input(vector<vector<int> >&k)
{
for (int i = 0; i < k.size(); i++)
for (int j = 0; j < k[i].size(); j++)
k[i][j] = 10 * i + j;
return k;
}
- 生命的礼物2013-05-15挺好的,仔细看了一下。
- Shooot谢2018-04-09这是个什么???
- tmacyi1122332013-01-17这个还不错,有参考价值
- sslnhalf2012-06-04的确是一种很好的办法,呵呵,感谢分享。
- 粉丝: 5
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助