0

根据 http://www.cplusplus.com/reference/vector/vector/emplace_back/ 我知道 emplace_back 会在不调用赋值运算符的情况下就地创建对象。但是在 std::vector 的情况下,它们调用赋值运算符,而在 std::list 的情况下它们不调用赋值运算符。

我的对象不可复制。除了使用指针之外,还有其他方法可以解决这个问题。

向量中的擦除似乎也调用了赋值运算符,列表中的擦除不调用赋值运算符。这对我来说似乎不对..

std 不支持不可复制的对象吗?

4

1 回答 1

5

vector要求元素类型是可移动的(不一定是可复制的),以便将元素保持在一个连续的数组中。

如果旧容量太小,插入在任何时候都可能需要将所有元素移动到新数组中。擦除,除了最后,需要被擦除的元素之后的元素向前移动。

其他容器不需要类型是可移动的,因此如果您不能(或不想)制作它,也许deque(允许在任一端插入和移除)或(允许在任何地方插入和移除)可能是一个选项list活动。

于 2015-02-09T18:40:26.637 回答