多维数组置零
时间: 2023-09-01 12:08:21 浏览: 87
多维数组置零可以使用双重循环来实现。以下是示例代码:
```c++
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size(), n = matrix[0].size();
vector<bool> row(m, false), col(n, false);
// 找到需要置零的行和列
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (matrix[i][j] == 0) {
row[i] = true;
col[j] = true;
}
}
}
// 将需要置零的行和列都置零
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (row[i] || col[j]) {
matrix[i][j] = 0;
}
}
}
}
```
该算法使用了两个布尔数组来记录需要置零的行和列。首先遍历整个数组,如果找到了一个0,就将该行和该列的标记设置为true。接下来再次遍历整个数组,如果某一行或某一列需要置零,就将该位置的值设置为0即可。
相关问题
vector多维数组初始化
### C++ 中多维 `vector` 数组的初始化
#### 使用构造函数初始化二维 `vector`
可以直接利用 `std::vector` 的构造函数来创建并初始化一个多维向量。对于一个 m×n 的二维 `vector`,可以通过指定内部 `vector<int>` 的数量以及每个内部 `vector<int>` 的初始值来进行初始化。
```cpp
#include <vector>
int main() {
int m = 3; // 行数
int n = 4; // 列数
std::vector<std::vector<int>> vec(m, std::vector<int>(n, 0));
return 0;
}
```
上述代码片段展示了如何定义一个具有三行四列且所有元素都设置为零的二维整型 `vector`[^1]。
#### 动态调整大小并通过 `resize()` 方法赋初值
除了在声明时就设定好尺寸外,还可以先声明一个空的 `vector<vector<T>>` 对象,之后再调用其成员函数 `resize()` 来改变它的规模,并给定默认填充值:
```cpp
#include <vector>
using namespace std;
int main(){
vector<vector<int>> matrix;
size_t rows = 5, cols = 6;
matrix.resize(rows, vector<int>(cols, -1));
// 此处matrix已经是一个5*6的矩阵,所有的元素都被设为了-1.
return 0;
}
```
这段程序说明了怎样动态地分配内存空间给一个五乘六的二维整形 `vector` 并将其全部位置置为 `-1`[^4]。
#### 嵌套大括号列表初始化器
另外一种方式就是采用嵌套的大括号列表作为参数传递给 `vector` 构造函数完成初始化工作,这种方式适合于已知确切数值的情况:
```cpp
#include <iostream>
#include <vector>
int main () {
std::vector<std::vector<int>> v{
{1, 2},
{3, 4},
{5, 6}
};
for (auto& row : v){
for(int elem : row){
std::cout << elem << " ";
}
std::cout << "\n";
}
return 0;
}
```
此例子中展示了一个简单的两列三行的二维 `vector` 初始化过程及其遍历打印操作[^2]。
matlab 删除数组中的0元素
### 删除MATLAB数组中的零元素
在MATLAB中,可以通过逻辑索引来移除数组中的零元素。具体方法是创建一个不包含零的新数组。对于一维向量 `A` ,可以使用如下代码来实现:
```matlab
% 定义原始数组 A
A = [0, 1, 0, 3, 4];
% 移除所有的零元素
B = A(A ~= 0);
```
上述代码会生成一个新的数组 `B=[1, 3, 4]` 。这里 `(A~=0)` 创建了一个布尔掩码,表示哪些位置不是零;当这个条件应用于原数组时,只有满足条件的位置会被保留下来。
对于二维或多维矩阵的情况,则可以根据需求选择不同的方式处理。如果希望整个矩阵范围内去除所有零值并保持维度不变,可采用相似的方式操作每一列或行[^1]。
另外一种情况是从每行获取最大值并将其他元素置为零的操作也可以通过以下命令完成:
```matlab
% 假设 X 是输入矩阵
X = [1, 2, 0; 4, 5, 6; 7, 8, 9];
[rowMaxs, ~] = max(X,[],2); % 获取各行的最大值
Y = bsxfun(@times,X,rowMaxs==X); % 将非最大值设置成0 (适用于旧版本MATLAB)
% 对于较新版本的MATLAB可以直接用 times 函数代替bsxfun
Y = X .* (rowMaxs == X);
```
这段程序首先计算出各自行内的最高数值,接着利用这些信息构建新的矩阵 Y,在其中仅保留原来对应位置上的最大数而将其余部分变为零[^2]。
阅读全文
相关推荐
















