gpt4 book ai didi

C++容器/数组/元组一致访问接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:21 24 4
gpt4 key购买 nike

是否存在跨容器工作的一致元素访问语义(也许在 boost 中)?类似的东西:

element_of(std_pair).get<1>();
element_of(boost_tuple).get<0>();
element_of(pod_array).get<2>();

原则上我可以自己写,但我不想重新发明轮子。谢谢

最佳答案

容器有不同的访问方式,因为它们本质上是不同的。在 STL 中最接近的是迭代器。所有标准容器都有迭代器,因此您可以迭代它们并使用这些迭代器对它们使用相同的算法。但是,每个迭代器包含的内容因容器而异(必须只有元素,但映射有对)。如果您将 pair 视为一个容器,它不会与其他容器相适应,因为它没有迭代器。

在大多数情况下,使用迭代器可以解决问题。但是,显然不能完全解决问题,STL也没有解决办法。 Boost 可能,但我不知道有一个。

然而,要点是容器本质上是不同的,并且在很大程度上不能互换。通过使用标准迭代器,大多数容器都可以很容易地相互交换。但是,在不更改围绕它的一些代码的情况下将一个容器换成另一个容器通常没有意义,因为它们的行为如此不同。我相信 Scott Meyers 在他的“Effective STL”一书中强调了这一点。

如果您真的想使各种容器可以互换,我建议您重新考虑一下并更仔细地查看您正在做的事情。很可能这不是最好的主意。现在,对于您的特定应用程序来说,这很可能是一个好主意——我当然不能在不了解它的情况下说,你是最好的判断者——但在一般情况下,使容器真正可互换是一个馊主意。迭代器使得在它们上重用许多算法成为可能,但即便如此,您可以在特定容器上使用的算法类型也会根据该容器使用的迭代器类型(随机访问、双向等)而有所不同。

所以,不,除了迭代器之外,我不知道用于访问容器元素的预先存在的解决方案,但一般来说,我建议不要尝试它。容器并不是真正可以互换的,也不是故意的。

关于C++容器/数组/元组一致访问接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2124097/

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