gpt4 book ai didi

c++ - 剥离项目的最佳 C++ 容器?

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

我有一个文件列表(存储为 c 样式字符串),我将对其执行搜索,我将删除那些与我的参数不匹配的文件。用于此目的的最佳容器是什么?我现在正在考虑 Set。请注意,文件列表永远不会比初始化时大。我只会从容器中删除。

最佳答案

我绝对不会使用集合——您不需要对其进行排序,因此使用集合毫无意义。 Set 通常作为自平衡树实现,在您的情况下不需要自平衡算法。

如果您打算执行此操作一次,我会使用带有 remove_if 的 std::vector(来自 ),然后是删除。如果您之前没有使用过 remove_if,它所做的就是遍历并将所有相关项目向下移动,覆盖过程中不相关的项目。您必须在它后面删除以减小 vector 的大小。像这样:

std::vector<const char*> files;
files.erase(remove_if(files.begin(), files.end(), RemovePredicate()), files.end());

如果您想利用 std::list 的 O(1) 删除时间属性,编写代码来完成与 std::list 相同的事情会稍微困难一些。鉴于您只是在执行此一次性操作,可能会花费很短的时间,您甚至不会注意到它,我建议您这样做,因为这是最简单的方法。

老实说,我认为您不会发现 std::list 和 std::vector 方法在速度方面有太大差异。 vector 方法只复制每个值一次,所以它实际上非常快,但占用的空间要少得多。在我看来,如果您在整个应用程序的整个生命周期中进行大量添加和删除操作,那么使用 std::list 并使用三倍的空间才是真正合理的。

关于c++ - 剥离项目的最佳 C++ 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/490005/

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