gpt4 book ai didi

c++ - 如何有效地访问 C++ 中的列表信息?

转载 作者:太空狗 更新时间:2023-10-29 23:32:36 26 4
gpt4 key购买 nike

我最初是用 Python 制作这个游戏的,然后为了一个学校项目将其转换为 C++。

问题是 C++ 的 std::list 不允许我像 Python 的 list 那样访问项目 (list[1])更重要的是,访问列表 (list[2][5]) 内的列表项。我一直无法找到一种有效的方法来执行此操作,也找不到可行的列表替代方法。

最佳答案

不要使用 std::list .它实现了一个不提供下标运算符的双向链表,因为链表的随机访问无法以恒定的复杂性实现。

相反,使用 std::vector它实现了一个定义了下标运算符的动态增长数组

作为@ShadowRanger已发表评论,您可能还会发现 std::deque有用。它支持像 std::vector 这样的恒定时间随机访问,但另外还能够在您删除元素时自动释放存储空间。 (对于 std::vector,您必须通过调用 shr​​ink_to_fit 来显式执行此操作,这很容易走错方向。)当您需要追加元素时,它也很出色在开始和结束时。但据我了解,您无论如何都不想更改容器中的元素数量。

另请注意 Python 和 C++ 之间的另一个区别。在 Python 中,如果你写

my_things = [1, 2, 3, 4]
your_things = [5, 6, 7]
our_things = [my_things, your_things]

然后 your_thingsour_things[1] 指的是同一个列表。这是因为 Python 中的对象是通过引用引用的。另一方面,在 C++ 中,容器具有值语义。也就是说,如果你写

std::vector<int> my_things = {1, 2, 3, 4};
std::vector<int> your_things = {5, 6, 7};
std::vector<std::vector<int>> our_things = {my_things, your_things};

our_things 将包含 my_thingsyour_things拷贝,更改其中任何一个都不会影响另一个。如果这不是您想要的,您可以立即定义嵌套列表。

std::vector<std::vector<int>> our_things = {
{1, 2, 3, 4}, // my things
{5, 6, 7}, // your things
};

关于c++ - 如何有效地访问 C++ 中的列表信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34907443/

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