二维容器 变成1维容器, C++如何实现 ?
时间: 2024-10-13 16:08:28 浏览: 9
在C++中,将二维容器转换成一维容器通常可以通过迭代的方式来实现。二维容器如std::vector<std::vector<T>>可以被视为由行组成的矩阵。以下是几种常见的方法:
1. 使用`std::flatten`(C++20开始支持):
```cpp
#include <ranges>
std::vector<T> flat_container = std::ranges::flatten(container);
```
这会创建一个新的`std::vector`,其中包含了二维向量的所有元素。
2. 手动迭代:
```cpp
std::vector<T> flat_vector;
for (const auto& row : container) {
for (const auto& element : row) {
flat_vector.push_back(element);
}
}
```
通过嵌套循环,遍历每个元素并添加到新的一维向量中。
3. 如果底层数据结构支持,也可以考虑直接复制(例如,如果`container`是一个动态数组):
```cpp
T* temp = new T[container.size() * container.front().size()];
int i = 0;
for (const auto& row : container) {
for (auto& elem : row) {
temp[i++] = elem;
}
}
std::vector<T> flat_container(temp, temp + i);
// 不忘记释放内存
delete[] temp;
```
这里创建了一个新的动态数组,并填充了内容。
阅读全文