如何将vector作为元素插入另一个vector实现嵌套存储?
实现嵌套Vector的插入操作
当然可行啦!你需要的是嵌套Vector(也就是“Vector的Vector”),而不是把元素直接扁平化插入。下面给你一步步讲清楚怎么实现:
1. 先定义正确的容器类型
要让vec2能容纳其他完整的Vector,它的类型不能是普通的std::vector<int>,而得是std::vector<std::vector<int>>——简单说就是,这个容器里的每个元素本身都是一个int类型的Vector。
2. 用push_back直接推入整个Vector
这是最常用的方式,直接把一个完整的Vector作为元素添加到嵌套容器里:
#include <vector> using namespace std; // 示例里简化代码用,实际项目按需选择是否使用 int main() { // 定义嵌套容器vec2 vector<vector<int>> vec2; // 第一个要插入的vector vector<int> vec1 = {1, 2, 3}; vec2.push_back(vec1); // 把整个vec1作为元素加入vec2 // 重新赋值vec1,插入第二个vector vec1 = {4, 5, 6}; vec2.push_back(vec1); // 现在vec2的结构就是 {{1,2,3}, {4,5,6}},完全符合你的需求 return 0; }
3. 插入到指定位置(用insert)
如果你不想把新Vector加到末尾,而是插入到vec2的某个特定位置,可以用insert方法:
比如插入到vec2的开头:
vector<int> new_vec = {x, y, z}; // 插入到第一个元素的位置 vec2.insert(vec2.begin(), new_vec);
或者插入到中间位置(比如第2个元素后面):
// 插入到索引为1的位置(0是第一个元素) vec2.insert(vec2.begin() + 1, new_vec);
4. 进阶:避免拷贝,直接构造元素
如果想减少不必要的拷贝,可以用emplace_back直接在嵌套容器里构造新的Vector,不用先单独创建一个Vector变量:
// 直接在vec2里构造并添加{7,8,9}这个vector vec2.emplace_back(vector<int>{7,8,9}); // C++11及以上还可以更简洁: vec2.emplace_back(std::initializer_list<int>{7,8,9});
为什么之前会扁平化?
如果你的vec2是普通的vector<int>,那插入单个元素时才会把其他Vector里的元素逐个拆出来扁平化;但只要把vec2定义成嵌套类型,每个插入的元素都是完整的Vector,自然就形成你想要的嵌套结构啦。
内容的提问来源于stack exchange,提问作者JimmyPop13
相关产品推荐
相关产品推荐

