我是整个商业的新手,我有一个问题。在使用stl之前,我的列表节点将是这样的:
Class node
{
int duration;
string name;
node * next;
node * previous;
};
所以我的问题是,当我即将使用stl时,我需要node * next
和node * previous
或者它们完全没用,因为std :: list使用它们自己的下一个和上一个对它们进行修改功能?
还有一个问题,你们更喜欢使用std :: list还是制作自己的?因为这将是我第一次使用std :: list而且我已经非常好了。
感谢您的时间。
答案 0 :(得分:4)
不,您不需要next
和previous
,std::list
在内部实现整个链表机制。只是:
Class node {
int duration;
string name;
};
并将您的列表定义为:
std::list<node> myList;
更好地使用std::vector
代替std::list
,在std::list
的大多数情况下都优于std::vector<node> myVec;
,因为它可以提供更多缓存友好。
std::pair
另一种选择是使用struct
而不是定义自己的std::list<std::pair<int, std::string>> myList;
:
std::pair
然而,在这里使用std::pair
是绝对主观的。我发现使用struct
而不是用两个成员变量定义// /static/css/blog.css
body: {
background: url("{% static 'images/jumbotron.jpg' %}");
}
更方便,因为我可以在定义的位置看到我的STL数据结构的元素类型。
答案 1 :(得分:0)
正如101010所说,情况就是如此。还记得stl列表的性能很好,因为它们用于那些的分配器针对内存管理进行了优化。
经典&#34;添加节点&#34;例程主要实现为单个分配(使用new(C ++)或malloc(C))。不过,您可以通过静态数组或在向量上放置数据并指向它们来改进它。我只是想告诉你想要建立自己的东西并比较性能。
另请注意,您使用的是双链表。在许多情况下,每个块只需要一个迭代器,stl具有forward_list容器。
答案 2 :(得分:0)
不,std::list
的元素不需要next
和previous
成员。 std::list
在内部处理此类记账。
通常,我会使用标准容器而不是自己滚动,除非我有一些标准容器确实不符合的特殊要求。如果std::list
是最适合的那个 - 它通常不是,但有时候 - 我使用它。
虽然尝试创建自己的容器有一些学习价值,但从长远来看,这种事情并不高效。标准容器 - 假设质量实施 - 比大多数人自己做的要好。