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