gpt4 book ai didi

c++ - 这是访问列表中对象的正确方法吗?

转载 作者:行者123 更新时间:2023-11-28 03:22:10 24 4
gpt4 key购买 nike

编辑:TLDR?这是一个摘要:

要求是一个本质上无限(或任意)长的容器。所以 list 听起来是个好主意,因为它将适合任何可用内存空间中的对象。

然而, vector 在访问时速度更快/效率更高,但如果我们没有很长的顺序 strip ,则可能无法放入内存。

建议使用指针 vector 来减少内存使用,但如果有 1 GB 的指针并且我有 4GB 的内存,问题仍然存在,它可能不适合!

解决方案: vector 列表可能是可行的方法。列表中的每个项目都可以是一个 vector ,其中包含 1000 个指向我们希望能够访问的项目的指针。一个类可以处理此功能。

** 原始问题:**

正如一位智者曾经说过的:“有了指针,如果它一次起作用,那并不能保证你做的是正确的。”

我有一个类:

class A;

A 类在 std::list 中:

std::list<A> list_of_A;

要访问其中的项目,我正在使用:

std::list<A>::iterator iter = list_of_A.begin();
std::advance(iter, <an_unsigned_int>);
return *iter;

这似乎可行,但是 return *iter 是正确的做法吗?我应该提到最后 3 行在一个返回 const A& 的函数中。

我在 stackoverflow 上寻找答案,但找不到这个问题的拷贝,这让我很吃惊。

List > Vector,因为我将在列表中交换内容。

最佳答案

是的;如果您的函数返回 A&A const&,您将在列表中返回一个引用;如果您的函数返回 A,您将返回一个拷贝。

但是,如果您经常这样做,为什么不使用 std::vector?它们具有随机访问迭代器并且几乎总是比 std::list 更高效,除非对象很大并且您拥有大量对象。 std::list 的缓存效率非常低。

关于c++ - 这是访问列表中对象的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15115208/

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