gpt4 book ai didi

c++ - 在 std::vector 中找不到成员

转载 作者:行者123 更新时间:2023-11-30 01:10:02 25 4
gpt4 key购买 nike

std::vector 有什么特别的原因吗?没有成员函数 find ?相反,您必须调用 std::find (和 #include <algorithm> )。

我问的原因是,我认为能够在某些实现中更改容器类,而不必更改访问容器的任何地方的代码,这将是一件好事。假设我更换了一个 std::vector其中实现使用 std::findstd::map .然后我还必须替换 std::find 的调用调用成员(member)find ,除非我想保持 std::find 的线性复杂度.为什么不只是有一个成员 find对于所有容器类,哪个元素使用最适合每个容器的算法找到?

最佳答案

从概念上讲,std::find只需要两个 InputIterator 就可以工作,而不需要一个 std::vector。因此,一个实现适用于所有容器,包括 STL 容器、和标准数组,以及任何可以提供 InputIterator 的东西,例如 istream_iterator()。 - 好的!

因此,不是为每个容器提供一个 find() 方法(并考虑到对于某些容器来说这可能是不可能的,比如标准数组),而是一个单一的通用 find( ) 函数是为所有人提供的。与为每个容器添加 find() 方法相比,这可能使您的代码更容易更改,因为它提供了一个一致的界面来搜索任何集合:来自控制台、网络等的输入流,或者只是一个基本数组。这是 STL 通用设计理念的一个重要方面:您可以在由两个 InputIterator 定义的任何集合/范围中搜索元素。

缺点,正如你所注意到的,在某些情况下,使用容器自己的方法可能会获得更好的性能,它可以做出特殊的假设来提高性能(类似于 list::removeunorderd_map::remove/find() 等)。出于这个原因,容器可以提供(这是 STL 的一个众所周知的设计特性)专门出于性能原因的方法:例如,std::unordered_map 不需要一个遍历整个 map 以查找元素。

总而言之,由于通用 std::find 可以有效地用于 vector ,因此无需提供成员函数,因为它可能会强制执行更不便携的设计。

有关 STL 的所有内容,请参阅 The C++ Standard Library - A Tutorial and Reference, 2nd Edition

关于c++ - 在 std::vector 中找不到成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38917572/

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