C++ stl 集合或链表

Posted

技术标签:

【中文标题】C++ stl 集合或链表【英文标题】:C++ stl collections or linked lists 【发布时间】:2010-03-15 22:42:28 【问题描述】:

我正在用 C++ 开发一个基于 OpenGL 的模拟。我现在正在优化我的代码,我在整个代码中看到了 std:list 和 std:vector 的频繁使用。什么是更具性能的:继续使用 C++ stl 数据结构或基于指针的链表?涉及 std::list 和 std::vector 的主要操作是打开一个迭代器并遍历数据结构中的所有项目并应用一些处理

【问题讨论】:

如果您还没有分析您的代码,那么您过早地提出了这个问题。在到达这里之前,您应该知道 std::list 或 std::vector 是否占用了不成比例的时间。 我怀疑如果你分析你的代码,你会发现你使用 STL 并不是最慢的事情。不要费心问这个问题,直到它是最慢的事情......在完全优化的发布模式下。 仅供参考,“性能”是我最常听到的词,因为您称之为“性能”。 【参考方案1】:

stl 指针容器怎么样?

您不太可能开发出比内置结构更好的结构。唯一的缺点是容器实际上确实包含存储在其中的对象的副本。如果您担心这种内存开销(多个结构占用相同对象的多个副本,破坏了整个表的一致性),您应该考虑使用 stl 结构的指针来指向您需要的内容。

从算法上讲,你需要的结构是在 stl 中实现的,所以你应该使用它。无需重新实现相同的结构。

【讨论】:

【参考方案2】:

使用 C++ STL 数据结构,但要有效地使用它们。如果您使用 std::list 和 std::vector,请查找诸如 find、for_each、accumulate 等函数。 这里有一些很好的阅读: http://www.cplusplus.com/reference/

阅读有关算法、数值和函数的部分。另外,我强烈推荐 Scott Meyers 的 Effective STL。

【讨论】:

以上是关于C++ stl 集合或链表的主要内容,如果未能解决你的问题,请参考以下文章

C++ 对向量或链表进行排序

学习数据结构一:链表

C++数据类型——链表

C++数据类型——链表

线性表-顺序表链表类模板的实现(数据结构基础 第2周)

STL库之集合基本使用方法