C++ vector<vector<double>> p1, 剔除p1中大小为0 的元素
时间: 2024-10-24 10:05:50 浏览: 26
在C++中,如果你想剔除`vector<vector<double>>`类型的`p1`中所有大小为0的子向量(即空的行或列),可以遍历这个二维向量,并移除那些元素个数为0的子向量。这里是一个简单的示例:
```cpp
#include <iostream>
#include <algorithm> // 包含sort和remove_if函数
// 辅助函数,用于判断向量是否为空
bool is_empty(const std::vector<double>& vec) {
return vec.empty(); // 判断向量是否长度为0
}
void remove_zeros(std::vector<std::vector<double>>& p1) {
for (auto& sub_vecs : p1) {
if (is_empty(sub_vecs)) {
sub_vecs.clear(); // 如果子向量为空,清空它
}
}
}
int main() {
std::vector<std::vector<double>> p1 = {{1, 0, 2}, {0, 3, 0}, {}, {4, 5, 6}};
std::cout << "Original matrix before removing zeros:\n";
for (const auto& row : p1) {
for (double num : row) {
std::cout << num << ' ';
}
std::cout << '\n';
}
remove_zeros(p1);
std::cout << "Matrix after removing zeros:\n";
for (const auto& row : p1) {
if (!row.empty()) { // 只打印非空行
for (double num : row) {
std::cout << num << ' ';
}
std::cout << '\n';
}
}
return 0;
}
```
在这个例子中,`remove_zeros`函数会清除`p1`中所有的空子向量。注意,这种方法只是改变了原向量,如果你不想改变原数据,你可以创建一个新的二维向量来存储结果。
阅读全文