为什么以及何时使用 clear()
Why and when to use clear()
根据this clear() will destroy all the objects, but will not free the memory. Also while I encountered the necessity of removing all elements of a set I found out that the time complexity of set.clear() is linear in size (destructions) whereas constant for set.swap()。 (删除向量的所有元素时出现同样的问题)
那么,在这种情况下,我们是否应该始终将 swap() 与一个空的 STL 容器一起使用?
因此,clear() 与空容器交换的需求和好处是什么。
抱歉,如果这看起来微不足道,但我找不到任何相关信息。
谢谢!
swap()
的时间复杂度是常数,是的。
您可能正在考虑与很快超出范围的局部变量进行交换。如果是这种情况,局部变量的析构函数在超出范围时被调用,并且该析构函数的时间复杂度在大小上是线性的,与 clear()
相同。所以没有性能优势,你付出的代价是代码的可读性较差。
当然调用 swap()
会更快,但除非你有无限量的可用空容器,否则最终你将不得不对交换的容器做一些事情()' d 项,在这种情况下,您将回到线性时间内销毁项目。
这并不意味着 swap()
技巧没有用,但是 - 例如,如果您的程序有一个 real-time 线程和一个非 real-time线程,您可能 swap()
容器在 real-time 线程中,然后将其留给非 real-time 线程来执行实际的 clear()
/items-destruction打开,这样 real-time 线程就不必花费有限的时间来销毁项目。
when to use clear()
当您想要删除容器的所有元素时。
why use clear()
因为这是最清晰和最有效的实现上述的方法。
clear() will destroy all the objects, but will not free the memory.
这是一个令人满意的功能。它允许 clear
很快,并且允许将新元素添加到容器中很快,因为内存已经分配。
如果你想释放内存——知道如果你插入新元素你将需要再次支付分配费用,你可以使用shrink_to_fit
。
I found out that the time complexity of set.clear() is linear in size (destructions) whereas constant for set.swap().
你忘记了以前是空的,现在是完整的集合最终必须被销毁。猜猜set的析构函数的复杂度是多少
集合的大小是线性的。
So isn't that we should always use swap() with an empty STL container whenever possible in such cases?
Swap 引入了额外的不必要的操作,而 clear
不会这样做,因此效率不高。此外,它没有明确表达意图。
在一般情况下用交换替换清除没有任何优势。
在极少数情况下,用空容器交换确实有用。例如,如果您需要清除临界区内的容器,然后交换并稍后销毁元素可以减少该临界区的大小。
根据this clear() will destroy all the objects, but will not free the memory. Also while I encountered the necessity of removing all elements of a set I found out that the time complexity of set.clear() is linear in size (destructions) whereas constant for set.swap()。 (删除向量的所有元素时出现同样的问题)
那么,在这种情况下,我们是否应该始终将 swap() 与一个空的 STL 容器一起使用? 因此,clear() 与空容器交换的需求和好处是什么。
抱歉,如果这看起来微不足道,但我找不到任何相关信息。 谢谢!
swap()
的时间复杂度是常数,是的。
您可能正在考虑与很快超出范围的局部变量进行交换。如果是这种情况,局部变量的析构函数在超出范围时被调用,并且该析构函数的时间复杂度在大小上是线性的,与 clear()
相同。所以没有性能优势,你付出的代价是代码的可读性较差。
当然调用 swap()
会更快,但除非你有无限量的可用空容器,否则最终你将不得不对交换的容器做一些事情()' d 项,在这种情况下,您将回到线性时间内销毁项目。
这并不意味着 swap()
技巧没有用,但是 - 例如,如果您的程序有一个 real-time 线程和一个非 real-time线程,您可能 swap()
容器在 real-time 线程中,然后将其留给非 real-time 线程来执行实际的 clear()
/items-destruction打开,这样 real-time 线程就不必花费有限的时间来销毁项目。
when to use clear()
当您想要删除容器的所有元素时。
why use clear()
因为这是最清晰和最有效的实现上述的方法。
clear() will destroy all the objects, but will not free the memory.
这是一个令人满意的功能。它允许 clear
很快,并且允许将新元素添加到容器中很快,因为内存已经分配。
如果你想释放内存——知道如果你插入新元素你将需要再次支付分配费用,你可以使用shrink_to_fit
。
I found out that the time complexity of set.clear() is linear in size (destructions) whereas constant for set.swap().
你忘记了以前是空的,现在是完整的集合最终必须被销毁。猜猜set的析构函数的复杂度是多少
集合的大小是线性的。
So isn't that we should always use swap() with an empty STL container whenever possible in such cases?
Swap 引入了额外的不必要的操作,而 clear
不会这样做,因此效率不高。此外,它没有明确表达意图。
在一般情况下用交换替换清除没有任何优势。
在极少数情况下,用空容器交换确实有用。例如,如果您需要清除临界区内的容器,然后交换并稍后销毁元素可以减少该临界区的大小。