c++ - 用更合适的类替换 `std::vector`

标签 c++ vector doubly-linked-list

我最近从头开始编写了我的第一个程序,但作为该领域的专业人士,我担心我可能没有使用最合适的解决方案。

在我的程序中,我必须使用对象列表(和列表列表),我在其中连续添加和删除元素,不一定在列表的开头或结尾。
使用指针列表不是一种选择,给出了要求。

当我开始时,我只知道 std::vector 类,因此我使用了它,尽管我知道它需要连续的内存,因此这种选择会导致重复的重新分配。
在尝试解决另一个问题时,我发现存在可能更适合此任务的其他类,例如 std::liststd::deque

我主要通过索引访问对象

myvector[index].function();

我最常使用的标准函数是

myvector.size();
myvector.begin();
myvector.pop_back();
myvector.push_back();
myvector.insert(myvector.begin()+offset, number, new_element);

而且我没有重载任何函数/运算符。

你能为我的范围推荐最好的容器/双向链表吗?
是否可以将 std::vector 无缝替换为任何其他标准容器?
有什么特别需要注意的地方吗?

最佳答案

Could you suggest the best container/doubly-linked list for my scope?

如果你通过索引访问元素,链表不是一个好的解决方案:你必须从头开始遍历列表,所以它是一个 O(N) 操作。由于这个原因,std::liststd::forward_list 在它们的接口(interface)中没有这样的访问权限。

Is it possible to seamlessly substitute std::vector with any other standard container?

不适用于 std::list,因为它无法通过索引访问。 std::deque 可能 是合适的,但前提是你不依赖于一个连续 block 中的基础数据(我假设你不依赖,因为你在问关于链表)

Are there special issues I have to pay attention to?

与性能一样,您应该首先确定您是否有问题。 如果您遇到 std::vector 的性能问题,请尝试其他方法,并测量实际运行场景中的性能差异。不同容器的性能特征可能非常反直觉,因此测量在这里尤为重要。

相关链接:std::vector vs. std::list vs. std::deque comparison . Bjarne Stroustrup 的 Going Native 2012 keynote speech .

关于c++ - 用更合适的类替换 `std::vector`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933850/

相关文章:

c# - 如何获取链表的某一部分

java - 双向链表的测试问题

c++ - connect() 在连接被拒绝时中断套接字

C# COM 服务器 - 在 C++ 中测试

c++ - 如何使用所有者密码但没有用户密码来解密 PDF?

matlab - 如何在 matlab 中分析矢量外积

Char 双向链表

C++ 静态成员函数及其作用域

Java将一维 vector 添加到二维 vector

c++ - 子 vector 修改原始 vector