gpt4 book ai didi

pointers - vector >是否保证元素地址保持不变?

转载 作者:行者123 更新时间:2023-12-04 04:21:35 24 4
gpt4 key购买 nike

我们都知道,当我们追加更多元素时(由于调整大小),vector<T>中元素的地址可能会更改,而list<T>中的元素保持在同一地址。

问题是,vector<list<T>>怎么样?例如,

vector<list<T>> container;
// Insert some elements to container...
T* ptr = &(container[0].back());
// Insert more elements to container...

我们可以假设 ptr保持有效吗?

我天真地认为应该这样做,因为当向量调整大小时,应调用 list<T>的move构造函数,该函数不应复制/移动单个元素。但是,我不知道该标准是否可以确保这一点。

最佳答案

抱歉,没有。 std::list的move构造函数不是noexceptstd::vector在调整大小时使用了std::move_if_noexcept,它将作为所包含std::list的副本。所有列表节点将被分配和复制。他们的地址将不稳定。

关于pointers - vector <list <T >>是否保证元素地址保持不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596255/

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