C++ 在迭代过程中替换std向量的先前内容
我正在写一个程序,它应该在一个图中找到一个有根的生成树,以及所有连接根和生成树中其他顶点的唯一路径。我尝试仅使用一个功能执行两个操作:C++ 在迭代过程中替换std向量的先前内容,c++,stdvector,C++,Stdvector,我正在写一个程序,它应该在一个图中找到一个有根的生成树,以及所有连接根和生成树中其他顶点的唯一路径。我尝试仅使用一个功能执行两个操作: void Spanning_tree_finder(){ int * v=Add_edges(s1); int control=0; int size; for(int i=0; i<_g.GetE(); i++){ if(control==0 && v[i]==1) { s1[i]=
void Spanning_tree_finder(){
int * v=Add_edges(s1); int control=0; int size;
for(int i=0; i<_g.GetE(); i++){
if(control==0 && v[i]==1) {
s1[i]=1; control=1;
size=_v.size();
for(int j=0; j<size; j++){
if(_v[j].Getv2()==_g.GetEdge1(i)){
Path pnew=_v[j];
pnew.Setv2(_g.GetEdge2(i));
pnew.Setp(i);
_v.push_back(pnew);
};
if(_v[j].Getv2()==_g.GetEdge2(i)){
Path pnew=_v[j];
pnew.Setv2(_g.GetEdge1(i));
pnew.Setp(i);
_v.push_back(pnew);
};
};
Spanning_tree_finder();
};
};
return;
};
问题的核心是如何在
\u v
中插入pnew
。不是将元素pnew
添加到向量的末尾,而是将\u v
中的所有元素替换为pnew确实听起来像\u v
中的对象有一些通过指针访问的数据,通过修改您认为是新的对象,您正在修改\u v
中已经存在的对象
Crystal ball说,Path pnew=_v[j]
复制一个现有的Path对象,其中包含一些指向数据的指针。指针将被复制到新对象,但指向相同的位置,因此Setv2
和Setp
等修改器将更改所有指针的数据
尝试通过用其他东西(如向量)替换显式指针来修复路径,或者编写正确的复制构造函数和赋值运算符来正确处理这些指针字段(通过分配新内存和复制内容)。请提供,这段代码中有太多的未知数,这是您唯一需要终止的关闭}
后的code>是在结构、类、枚举和联合之后。我不能肯定,但您的递归看起来很危险。(int j=0;jI不认为变量size
的定义是个问题,因为我引入它正是为了避免程序无限循环谢谢!我没有为Path定义一个单独的类,而是找到了一种在函数所在的同一类中定义对象的方法,现在它可以工作了。
for(int j=0; j<size; j++){
if(_v[j].Getv2()==_g.GetEdge1(i)){
Path pnew=_v[j];
pnew.Setv2(_g.GetEdge2(i));
pnew.Setp(i);
_v.push_back(pnew);
};
if(_v[j].Getv2()==_g.GetEdge2(i)){
Path pnew=_v[j];
pnew.Setv2(_g.GetEdge1(i));
pnew.Setp(i);
_v.push_back(pnew);
};
};