vector<vector<pair<int,int>>>怎么开空间
时间: 2025-08-21 21:34:09 浏览: 6
### C++ 中嵌套 `vector<vector<pair<int, int>>>` 的分配空间与初始化方法
在 C++ 中,`vector<vector<pair<int, int>>>` 是一种嵌套容器结构,表示一个包含多个 `vector<pair<int, int>>` 的向量。为了正确地分配空间和初始化,需要明确每个层次的大小以及如何填充数据。
以下是几种常见的分配空间和初始化方法:
#### 方法一:使用构造函数指定大小
可以通过构造函数直接为外层和内层向量分配空间,并提供默认值进行初始化。
```cpp
#include <iostream>
#include <vector>
int main() {
// 定义外层向量大小为3,内层向量大小为2,pair的初始值为(0, 0)
std::vector<std::vector<std::pair<int, int>>> nestedVec(3, std::vector<std::pair<int, int>>(2, {0, 0}));
// 输出结果以验证初始化
for (const auto& innerVec : nestedVec) {
for (const auto& p : innerVec) {
std::cout << "{" << p.first << ", " << p.second << "} ";
}
std::cout << std::endl;
}
return 0;
}
```
这种方法通过构造函数指定了外层向量的大小为 3,内层向量的大小为 2,并且每个 `pair<int, int>` 的初始值为 `{0, 0}`[^1]。
---
#### 方法二:逐步分配空间
如果无法提前确定大小,可以逐步分配空间并填充数据。
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<std::pair<int, int>>> nestedVec;
// 分配外层向量大小为3
nestedVec.resize(3);
// 分配内层向量大小为2,并填充初始值
for (auto& innerVec : nestedVec) {
innerVec.resize(2, {0, 0});
}
// 输出结果以验证初始化
for (const auto& innerVec : nestedVec) {
for (const auto& p : innerVec) {
std::cout << "{" << p.first << ", " << p.second << "} ";
}
std::cout << std::endl;
}
return 0;
}
```
此方法首先通过 `resize` 分配外层向量的大小,然后对每个内层向量调用 `resize` 来分配其大小,并设置默认值[^2]。
---
#### 方法三:动态添加元素
如果大小是动态决定的,可以通过 `push_back` 动态添加元素。
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<std::pair<int, int>>> nestedVec;
// 动态添加外层向量元素
for (int i = 0; i < 3; ++i) {
std::vector<std::pair<int, int>> innerVec;
for (int j = 0; j < 2; ++j) {
innerVec.push_back({i * j, i + j}); // 动态填充pair
}
nestedVec.push_back(innerVec); // 将内层向量添加到外层向量
}
// 输出结果以验证初始化
for (const auto& innerVec : nestedVec) {
for (const auto& p : innerVec) {
std::cout << "{" << p.first << ", " << p.second << "} ";
}
std::cout << std::endl;
}
return 0;
}
```
这种方法适合在运行时根据逻辑动态生成嵌套向量的内容[^3]。
---
#### 方法四:结合迭代器和构造函数
如果需要更复杂的初始化逻辑,可以结合迭代器和构造函数来实现。
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<std::pair<int, int>>> nestedVec;
// 动态添加外层向量元素
for (int i = 0; i < 3; ++i) {
std::vector<std::pair<int, int>> innerVec;
for (int j = 0; j < 2; ++j) {
innerVec.emplace_back(i * j, i + j); // 使用emplace_back优化性能
}
nestedVec.push_back(innerVec);
}
// 使用迭代器遍历输出
for (const auto& innerVec : nestedVec) {
for (const auto& p : innerVec) {
std::cout << "{" << p.first << ", " << p.second << "} ";
}
std::cout << std::endl;
}
return 0;
}
```
此方法利用了 `emplace_back`,避免了额外的临时对象创建,从而提高了性能[^4]。
---
### 总结
- 如果大小已知,推荐使用构造函数或 `resize` 方法。
- 如果大小未知,推荐使用 `push_back` 或 `emplace_back` 动态添加元素。
- 遍历时,可以使用范围 `for` 或迭代器来访问嵌套向量中的元素。
阅读全文
相关推荐




















