C++ 一个奇怪的bug,它的函数给出了三角形网格的连接部分

C++ 一个奇怪的bug,它的函数给出了三角形网格的连接部分,c++,mesh,C++,Mesh,我试图在C++中编写一个函数,该函数提供三角形网格的连接组件。 我有一个自定义类,可以对三维三角形网格进行建模。 我的目标是获得一个std::vector,在每个组件中包含网格的连接组件 classmesh2d{ std::vector*node_ptr; std::向量elt; 公众: Mesh2d(){}; Mesh2d(std::vector&node){} 无效加载(常量字符串和文件名){} 无效回推(常量Elt2d&e){} std::vector::迭代器begin(){} std:

我试图在
C++
中编写一个函数,该函数提供三角形网格的连接组件。 我有一个自定义类,可以对三维三角形网格进行建模。 我的目标是获得一个
std::vector
,在每个组件中包含网格的连接组件

classmesh2d{
std::vector*node_ptr;
std::向量elt;
公众:
Mesh2d(){};
Mesh2d(std::vector&node){}
无效加载(常量字符串和文件名){}
无效回推(常量Elt2d&e){}
std::vector::迭代器begin(){}
std::vector::迭代器end(){}
std::vector Num(const int&j)const{}
无效打印(字符串文件名)常量{}
常量Elt2d&运算符[](常量int&j)常量{}
std::vector const GetElt()const{}
void GetBoundary(网格和网格){}
friend std::vector adj(Elt2d e,Mesh2d mesh){}
friend int find_index(elt2de,Mesh2d mesh){}
friend void DFS(int j,std::vector visited,Mesh2d边界,std::vector ConnectedComponents,int n){
访问[j]=真;

std::cout您正在通过值传递访问的

void DFS(int j,std::vector访问,Mesh2d边界,std::vector ConnectedComponents,int n)
这意味着每次调用
DFS
函数时都会复制此向量,并且不会更改原始向量的值。您可以观察到,无论何时从函数返回,这些值都会“还原”

改为通过引用传递向量:

void DFS(int j,std::vector和visitored,Mesh2d和boundary,std::vector和ConnectedComponents,int n)

修改代码的其余部分,您永远不会通过引用传递“重”对象。这至少是低效的。

我完全不知道为什么会发生这种情况——1)使用调试器。2)通过将
[]
替换为
at()来更改对所有向量的访问权限
函数。这将检查您的代码是否超出了范围。3)发布一个,这样我们就可以实际运行一些东西。
Mesh2d(){};
--这无法初始化指针成员。而且
Mesh2d
违反了,但是您正在通过值将其传递给
DFS
函数。您确实需要发布一个,因为您现在的代码有多个问题。我是否应该发布我的
Elt2d
类以及整个
Mesh2d
Mesh
那上课呢?
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   0   1   1   1   1   1   1   1
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   0   0   1   1   1   1   0   1
visited = 1 1   1   1   1   0   1   1   1   1   0   1
visited = 1 1   1   1   1   1   1   1   1   1   0   1
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   1   0   1   1   1   1   1   1
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   0   1   1   1   1   1   0   1
visited = 1 1   1   1   1   1   1   1   1   1   0   1
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   0   1   1   1   1   1   1   1
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   0   0   1   1   1   1   1   1
visited = 1 1   1   1   1   0   1   1   1   1   1   1
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   0   1   1   1   1   1   1   1
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   0   0   1   1   1   0   1   1
visited = 1 1   1   1   1   0   1   1   1   0   1   1
visited = 1 1   1   1   1   1   1   1   1   0   1   1
visited = 1 1   1   1   1   1   1   1   1   1   1   1
visited = 1 1   1   1   1   0   1   1   1   1   1   1