You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:10:31