gpt4 book ai didi

c++ - emplace_back 在 vector 中而不是在列表中调用赋值运算符

转载 作者:太空宇宙 更新时间:2023-11-04 16:11:17 25 4
gpt4 key购买 nike

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

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

还有在vector中erase好像调用了赋值运算符,列表中的删除不调用赋值运算符。这对我来说似乎是错误的..

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

最佳答案

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

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

其他容器不要求类型是可移动的,所以可能是 deque(允许在任一端插入和移除)或 list(允许在任何地方插入和移除)如果您不能(或不想)使其可移动,这可能是一种选择。

关于c++ - emplace_back 在 vector 中而不是在列表中调用赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com