我必须维护一个无序整数列表,其中整数的数量是未知的。它可能会随着时间的推移而增加或减少。我需要经常更新这个整数列表。我尝试过使用矢量。但它真的很慢。数组似乎更快,但由于列表的长度不固定,因此需要花费大量时间来调整它。请建议任何其他选择。
答案 0 :(得分:1)
考虑到您的评论,std::set
或std::unordered_set
似乎比std::vector
更符合您的需求。
答案 1 :(得分:0)
如果值不重要,请使用hash table。时间是O(1)。我很确定你会在标准模板库中找到一个实现。
如果失败,splay tree非常快,特别是如果你想保持订单的顺序:每次操作的摊销成本为O(ln n),常数因子非常低。我认为C ++ stdlib map就是这样的。
了解您的数据结构。
答案 2 :(得分:0)
如果顺序数据结构无法满足要求,您可以尝试查看树(二进制,AVL,m路,红黑等)。我建议你尝试实现AVL树,因为它产生一个平衡或接近平衡的二叉搜索树,可以优化你的操作。有关AVL树的更多信息:http://en.wikipedia.org/wiki/AVL_tree
答案 3 :(得分:0)
好吧,deque没有调整大小的成本,但是如果它是无序的,它的搜索时间是线性的,它的删除和插入操作时间在它自己的中间甚至比矢量更值。
如果您不需要搜索数字的值,则可以选择hashmap或map。不调整成本。然后将地图的键设置为数字的索引,将值设置为数字的值。搜索和插入操作优于线性操作。
答案 4 :(得分:0)
如果您对阵列大小的动态增量感兴趣,可以执行此操作。
current =0;
x = (int**)malloc(temp * sizeof(int*));
x[current]=(int*)malloc(RequiredLength * sizeof(int));
所以添加元素到数组以及在x [current]中填充元素的时候 您可以通过执行
为元素添加更多空间x[++current]=(int*)malloc(RequiredLength * sizeof(int));
这样做可以容纳 RequiredLength 更多元素。
你最多可以重复1024次,这意味着 1024 * RequiredLength 元素可以
适应,这里它让你有机会随时增加数组的大小。
您始终可以通过X [n / 1024] [n%1024];
访问第n个元素答案 5 :(得分:-1)
std :: list肯定是为这些问题创建的,添加和删除列表中的元素不需要像向量中那样重新分配内存。但是,由于列表的内存分配非常复杂,搜索元素可能会被证明是一种痛苦的经历,但如果你不经常搜索它的条目,就可以使用它。