gpt4 book ai didi

c++ - 将一个对象数据复制到另一个相同类型的对象c++

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:14 24 4
gpt4 key购买 nike

好吧,我知道这是一个已经写好的问题,我遵循了几个解释,但我似乎仍然没有运气。也许在搜索过程中我没有看到某个解释,或者我做错了什么。

我创建了一个图表,我正在尝试将数据从一个图表复制到另一个图表。这么多工作。但是我无法将它们分开。

graph_maker temp_graph;
temp_graph = kruskal_graph;
for(unsigned int j = 0; j < min_edges.size(); j++){
temp_graph.add_undirected_edge(min_edges[j].node1, min_edges[j].node2, min_edges[j].edge_dist);
if(check_cycle(temp_graph) == true)
temp_graph = kruskal_graph;
else
kruskal_graph = temp_graph;
}

temp_graphkruskal_graph 是同一类型,称为 graph_maker。当我执行 add_undirected_edge() 函数时,边缘被添加到两个对象。为了让它们分开,我尝试重载 graph_maker 类的赋值运算符:

    graphmaker& operator=(const graphmaker& Other)
{
v_map = Other.v_map;
return *this;
}

v_map 是包含我需要的数据的结构。我还尝试了以下方法:

    graphmaker& operator=(graphmaker other)
{
using std::swap;
swap(v_map, other.v_map);
return *this;
}

但是这些技术都没有使两个对象保持分离。对于两者,当我添加边缘时,它会添加到 for 循环之后的第一行。我觉得我犯了一些简单的错误,但我很难找出原因。

感谢您的意见。

编辑:

struct vertex
{
vector <pair<float,vertex*>> adj; //cost of edge, destination vertex
string name;
vertex(string s){
name=s;
}
};

class graphmaker
{
public:
/*
graphmaker& operator=(graphmaker other)
{
using std::swap;
swap(v_map, other.v_map);
// repeat for other member variables;
return *this;
}*/

graphmaker& operator=(const graphmaker& Other)
{
v_map = Other.v_map;
return *this;
}

//typedef map<string, vertex *> map;
map<string, vertex *> v_map;
void add_vertex(const string&);
void add_directed_edge(const string& from, const string& to, float cost);
void add_undirected_edge(const string& node1, const string& node2, float cost);
void make_graph(const string& name);
};

最佳答案

为了深度复制包含动态分配元素的复杂数据结构,您需要使用 new 初始化每个动态成员以保持它们独立。因此,如果您有一些节点(顶点)指针,则需要使用 new 为新对象初始化它们。

关于c++ - 将一个对象数据复制到另一个相同类型的对象c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17670735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com