Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在迭代过程中替换std向量的先前内容_C++_Stdvector - Fatal编程技术网

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); 
            };
};