【发布时间】:2015-06-25 09:30:13
【问题描述】:
我有一个std::vector<int>,我想丢弃第一个和最后一个元素。仅复制元素不是一种选择,因为这是O(n)。
有没有像vector.begin()+=x 这样的东西让向量稍后开始并提前结束?
我也试过了
items = std::vector<int> (&items[x+1],&items[0]+items.size()-y);
其中 items 是我的向量,但这给了我bad_alloc
【问题讨论】:
-
也许您应该说明您要解决的高级问题是什么。
-
你将如何处理提取的向量?可以为
begin和end迭代器编写一个包装器是一个解决方案吗?这不是真正的vector,不过,它允许您对其进行迭代并访问随机元素。也可以编写push_back和push_front方法,它们将替换现有元素,但在这种情况下,您还应该存储原始vector。而且,作为另一种解决方案,您可以看看持久集合的想法。 -
我正在实施算法来计算装箱问题的下限。在第一步中,我通过在最佳解决方案中丢弃所有单独或成对的物品来减少问题。由于我的向量已排序,因此这些元素是最后一个元素和第一个元素。编辑:我的算法是
O(n),我不想把它炸到O(n^2) -
为什么你需要“把它炸到
O(n^2)”来改变你的迭代范围? o.O -
好吧,我把两件事搞混了。它不会损害时间复杂性。
标签: c++ arrays vector stl time-complexity