在编程中,我们会遇到各种需要使用中间 STL 容器的情况,如下例所示:
while(true)
{
set < int > tempSet;
for (int i = 0; i < n; i ++)
{
if (m.size() == min && m.size() <= max)
{
tempSet.insert(i);
}
}
//Some condition testing code
}
或者
set < int > tempSet;
while(true)
{
for (int i = 0; i < n; i ++)
{
if (m.size() == min && m.size() <= max)
{
tempSet.insert(i);
}
}
tempSet.clear();
//Some condition testing code
}
考虑到 C++ 编译器的现状,哪种方法在时间和空间复杂度方面更好?
最佳答案
第一个版本是正确的。它几乎在所有方面都更简单。更易于编写、更易于阅读、更易于理解、更易于维护等....
第二个版本可能更快,但也可能不会。在使用它之前,您需要证明它具有显着优势。在大多数重要情况下,我猜想两者之间不会有可衡量的性能差异。
有时在嵌入式编程中避免将东西放在堆栈上是很有用的;在这种情况下,第二个版本是正确的。
默认使用第一个版本;仅当您可以给出充分的理由时才使用第二种(如果原因是性能,那么您应该有证据表明好处是显着的)。
关于C++ STL : Container Recreation or Reuse after clearing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/217149/