我非常喜欢STL。它使编码算法变得非常方便,因为它为您提供了所有原语,如分区、查找、binary_search、迭代器、priority_queue 等。此外,您根本不必担心内存泄漏。
我唯一担心的是让 STL 工作所必需的运算符重载的性能损失。 为了进行比较,我认为它依赖于 == 提供所需的语义。如果我们要将我们的类添加到容器中,我们需要重载 ==operator。
为了这种便利,我损失了多少效率?
另一个关于内存泄漏的问题:
- 使用 STL 容器时会发生内存泄漏吗?
- Java 中会发生内存泄漏吗?
最佳答案
在通用类型上使用 STL 算法时,您必须以某种方式提供比较逻辑。运算符重载对任何其他函数没有性能损失,并且可以(与任何其他函数一样)内联以消除任何函数调用开销。
许多标准容器和算法也使用 std::less
因此默认情况下 <
而不是 ==
.
标准容器本身不会泄漏,但您可以使用它们来保存对象(例如指针),这些对象不一定会清理它们“拥有”的内存。
在 Java 中很难泄漏内存,但这并不意味着你不会因为没有良好的对象所有权语义而陷入困境,也不意味着你不能用完所有可用内存和崩溃。
关于java - 运算符重载 STL 的性能损失是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1800423/