gpt4 book ai didi

c++ - 指向索引处 vector 的指针与迭代器

转载 作者:太空狗 更新时间:2023-10-29 20:06:26 25 4
gpt4 key购买 nike

我有一个vector< Object > myvec,我在我的代码中使用它来保存内存中的对象列表。我通过使用

以“正常” C方式在该 vector 中保留指向当前对象的指针
Object* pObj = &myvec[index];

这一切都很好,如果...是连续的,因此他们不会努力将 vector 保持在相同的内存位置。

我可以为 myvec 保留足够的空间来防止这种情况发生,但我不喜欢这种解决方案。

我可以保留所选 myvec 位置的索引,当我需要使用它时直接访问它,但这是对我的代码进行代价高昂的修改。

我想知道当 vector 被重新分配/移动时,迭代器是否保持它们的引用完好无损,如果是这样,我可以直接替换

Object* pObj = &myvec[index];

通过类似的东西

vector<Object>::iterator = myvec.begin()+index;

这意味着什么?

这可行吗?

保存指向 vector 位置的指针的标准模式是什么?

干杯

最佳答案

不...使用迭代器你会遇到同样的问题。如果执行 vector 重新分配,则所有迭代器都将失效,使用它们是未定义的行为。

使用 std::vector 的唯一抗重新分配的解决方案是使用整数索引。

例如使用 std::list 事情是不同的,而且效率折衷也是不同的,所以这真的取决于你需要做什么。

另一种选择是创建您自己的“智能索引”类,它存储对 vector 和索引的引用。通过这种方式,您可以一直只传递一个“指针”(并且您可以为它实现指针语义),但代码不会受到重新分配风险的影响。

关于c++ - 指向索引处 vector 的指针与迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957747/

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