gpt4 book ai didi

c++ - 如何维护 2 个对象列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:23 25 4
gpt4 key购买 nike

我的 C++ 程序需要维护 2 个对象列表。

list<A*> inuse;
list<A*> free;

所以对象 A 甚至可以在“inuse”列表或“free”列表中,但不能同时在两者中。
http://www.cplusplus.com/reference/stl/list/

我正在考虑使用“列表”作为我的列表的数据结构。我的问题是

  1. 为什么我不能随机访问列表中的 elmenet,我查看了上面的 api,我没有看到获取 inuse[2] 的方法;
  2. 如何删除列表中的元素?有一个 erase(),但我如何使用它来删除元素 #2?在我删除元素 2 之后? STL列表会自动填充删除的地方吗?例如#3 会变成#2,#4 会变成#3 等等?

谢谢。

最佳答案

使用std::vector .它具有随机元素访问([]at())。

//does NOT check for out of range
myvector[i];

//does check for out of range
myvactor.at(i);

您可以使用 erase() 从 vector 中删除元素,它会自动处理孔(#3 变成 #2,依此类推)

//erase the 6th element
myvector.erase (myvector.begin()+5);

// erase the first 3 elements:
myvector.erase (myvector.begin(),myvector.begin()+3);

但是如果你需要一个一个地删除很多对象,并且列表中不能有2个相同的对象,你可以尝试使用std::map .使用对象的一些独特属性作为键,对象本身作为值(或对象本身作为键,true 作为值)。它还具有类似的随机访问操作符[]erase()功能。

关于c++ - 如何维护 2 个对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2694462/

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