2

我有某种类型的向量,我想以某种随机顺序破坏元素而不移动向量中的其他元素。稍后我可能会在那些被破坏的洞(或不)中放置新的。当我销毁向量时,我不想为已经被销毁的元素调用析构函数,那么是否可以这样做,如果可以,怎么做?

我一直在考虑使用 char[sizeof(T)] 作为向量元素类型,但我看到 std::align_of 和 std::aligned_storage 仅适用于 POD 存储。那么,我如何确保这适用于非 POD 类型?

还有其他方法吗?

我正在研究 MSVS2010,可能很快会升级到 2013 年。

4

3 回答 3

6
std::vector<boost::optional<T>> v;
...
v[i] = boost::none; // destroy an object

如果你不能使用boost,那么实现你自己的optional类是相当简单的。只需std::aligned_storage<T>bool指示对象是否有效一起使用。

于 2013-09-20T04:57:56.100 回答
0

如果我正确理解您的问题,您可以使用 shared_ptrs 向量来解决此问题。当你想摆脱一个元素时,将它分配给一个 nullptr shared_ptr。

于 2013-09-20T05:05:28.070 回答
-1

使用数组?

Type * a = new Type[BASE_SIZE];

插入时,如果您需要扩展使用此

Type * tmp = new Type[BIGGER_SIZE];
std::copy(a, a + a.length, temp);
delete[] a;
a = tmp;

删除时只需替换 NULL 或 w/e,并用删除标记或 w/e 替换它。

于 2013-09-20T05:05:19.693 回答