小编MMM*_*MCK的帖子

离开作用域时析构函数调用的顺序?(C++)

我试图了解退出范围时析构函数调用的顺序。假设我有以下代码:

class Parent{

Parent(){cout<<"parent c called \n";}
~Parent(){cout<< "parent d called \n";}
};

class Child: public parent{

Child(){cout<< "child c called \n";}
~Child(){cout<<"child d called\n";}
};
Run Code Online (Sandbox Code Playgroud)

现在,我知道子构造函数和析构函数是从父对象派生的,因此以下主要内容:

int main(){

Parent Man;
Child Boy;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

会产生输出:

parent c called
parent c called
child c called
... //Now what?
Run Code Online (Sandbox Code Playgroud)

但是现在,当我退出范围时会发生什么?我有多个需要销毁的东西,那么编译器是如何选择顺序的呢?我可以有两种输出可能性:

parent c called           |         parent c called      
parent c called           |         parent c called
child c called            |         child c called
child d called            |         parent d called
parent d …
Run Code Online (Sandbox Code Playgroud)

c++ destructor scope

2
推荐指数
1
解决办法
1396
查看次数

连通分量计数算法的运行时间

我一直在研究连接组件,并在Wikipedia上看到了这个描述:

使用广度优先搜索或深度优先搜索在线性时间内计算图的连通分量(根据图的顶点和边的数量)很简单。在任何一种情况下,从某个特定顶点 v 开始的搜索将在返回之前找到包含 v(并且仅此而已)的整个连接组件。要查找图的所有连接组件,请遍历其顶点,每当循环到达尚未包含在先前找到的连接组件中的顶点时,开始新的广度优先或深度优先搜索。

此操作的运行时间是多少?我遇到过一些消息来源说连接的组件是O(n)及时完成的。然而,据我所知,在最坏的情况下,每个顶点都是它自己的连接组件,这个算法必须执行 n 个 DFS/BFS 操作,每个操作都是它自己的O(n)时间。因此,不应该是 this 的运行时间O(n^2)吗?

algorithm performance graph time-complexity data-structures

2
推荐指数
1
解决办法
3361
查看次数