如何在C++中实现邻接表的克隆操作?
克隆C++邻接表的方法
你声明的vector<int> adj[N];本质是一个包含N个std::vector<int>的数组(注意:如果N不是编译期常量,这种写法属于编译器扩展,并非标准C++语法,更推荐用std::vector<std::vector<int>> adj(N);或者std::array<std::vector<int>, N> adj;)。克隆这个邻接表可以用以下几种方式:
方法1:直接遍历数组复制每个vector
如果坚持使用原数组声明方式,只需逐个复制数组中的每个vector即可——std::vector的赋值运算符会自动完成深拷贝:
// 声明和原邻接表同类型的克隆表 vector<int> adj_clone[N]; // 遍历每个顶点对应的vector,完成复制 for (int i = 0; i < N; ++i) { adj_clone[i] = adj[i]; }
方法2:改用现代C++容器简化克隆
如果可以调整原邻接表的声明方式,推荐使用更符合标准的容器:
- 若N是编译期常量,用
std::array:
#include <array> #include <vector> // 原邻接表 std::array<std::vector<int>, N> adj; // 直接拷贝克隆,std::array的默认拷贝会自动复制内部所有vector auto adj_clone = adj;
- 若N是运行期变量,用
vector<vector<int>>:
#include <vector> // 原邻接表,N为运行期变量 std::vector<std::vector<int>> adj(N); // 直接赋值完成克隆,vector的拷贝构造会深拷贝所有嵌套vector auto adj_clone = adj;
内容的提问来源于stack exchange,提问作者Rahul Gupta
相关产品推荐
相关产品推荐

