矢量的列表。我应该使用指针或值吗?

时间:2013-04-20 02:44:34

标签: data-structures c++11 stl hashtable

我正在实现数据结构哈希表,其中使用链解析冲突。

因此,作为基础数据结构,我需要列表向量 我从2种变体中选择:

  • std::vector<std::list<entry> >
  • std::vector<std::list<entry>* >

其中entry是包含数据和哈希值的struct;

问题:如果我使用第一个变体(在大输入数据上考虑问题),效率会大幅下降吗?

提前谢谢!

2 个答案:

答案 0 :(得分:3)

使用指针确实没有优势,它增加了在销毁向量时需要删除的复杂性。继续使用vector<list<entry> >list无论如何都将为元素分配内存,但它对你来说是不可见的。

如果必须调整向量大小,可能会有性能损失,但C ++ 11编译器应该使用移动而不是副本来最小化它。对于一个学习项目,表现不应该是你首先关注的问题。

答案 1 :(得分:-1)

唯一真正的区别在于,使用第一种方法,存储桶/链中的条目将存储在堆栈中,而第二种方法的条目将存储在堆上。对于大型结构,我发现在堆上存储通常更好,但它有争议。真的,只要你记得在将这些条目添加到列表中时对其进行新的修改,那么你就可以了。