0

我遇到了一个问题,在一个大向量上调用 std::vector.clear(),n > 1,000,000 需要很多秒。

它目前是结构的 std::vector,基本上是 POD。析构函数中不需要清理。我考虑将结构更改为类,因为我想向它们添加一些函数,但我不确定这将如何影响对大量这些类/结构的向量调用 clear。

归结为想知道 std::vector.clear() 何时会调用析构函数。我的印象是,这些天来,除了结构成员默认为公共之外,C++ 中的类和结构之间没有区别。

我不想不得不切换到使用 malloc、realloc 和释放自己并跟踪大小,只是因为我想保证不调用析构函数,但似乎我在调用 clear 时也会受到性能影响()。

4

1 回答 1

3

在 struct 和 class 之间切换不会有任何区别——你说得对,它们之间的唯一区别是默认可见的(对于结构来说是公共的,对于类来说是私有的)。

重要的是容器中的项目是否具有重要的析构函数。如果它们不重要,它们将被调用。如果它们是微不足道的,那么(至少通常)将不会真正调用任何东西。

在不了解当前代码和/或消耗时间的地方的情况下,就如何加快速度给出体面的建议有点困难。在你的位置上,我会认真考虑分析代码。一旦你确切地知道时间花在了哪里,你就有机会改进事情——但在那之前,你几乎是在黑暗中射击——你可能会尝试改进一些(几乎)没有时间开始的事情与,所以你的改进没有任何区别,或者你可能会做一些重要的事情,但最终会变得更慢而不是更快。

于 2013-08-14T02:06:28.687 回答