- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个函数可以读取文件夹中的文件(为此我正在使用 boost)。我也试图只保留 2 个文件(它们是日志文件,所以它们被轮换,我不想保留旧日志 = 第三个文件中的日志)。我将文件名存储在一个列表中,但由于读取不是按创建时间顺序完成的,因此我需要对列表进行排序。
我知道
Vectors are good at:
- Accessing individual elements by their position index (constant time).
- Iterating over the elements in any order (linear time).
- Add and remove elements from its end (constant amortized time).
和
Advantages to list containers:
- Efficient insertion and removal of elements anywhere in the container(constant time).
- Efficient moving elements and block of elements within the container or even between different containers (constant time).
- Iterating over the elements in forward or reverse order (linear time).
我不确定最好的方法是什么:使用列表还是 vector ?
我要吗
std::is_sorted
可以不每次都排序吗?更多信息:
因为boost的文件轮换没有“如果文件太多则删除文件”状态,只有“磁盘空间足够”,我实现了保留最后两个文件或每次删除最旧文件的步骤创建了新的,并且有 2 个日志文件。所以每次创建一个新的日志文件时,我都会验证文件列表,如果有足够的(2 个或更多)就删除旧的。因为文件的名称是 logs_%N.log
,所以我不知道文件 logs_X1.log
是否比 logs_X2.log
旧/p>
eg: I restart the applications, there are the files logs_51.log, logs_52.log, which one is going to be deleted? Supposing it is going to delete logs_51.log and create logs_0.log, if I restart it again, there will be logs_52.log and logs_0.log. Which one is going to be deleted now?)
这就是我需要排序的原因,因为应用程序可能会重新启动,而我读取现有文件,完成具有更多空间的文件,然后创建一个新文件。
最佳答案
对于这种特殊情况,容器将包含 ~2 个元素,一点点都没有关系。枚举文件和删除它们所花费的时间将比您选择的算法和数据结构慢几个数量级。只需将文件名放在 std::vector
中,使用 std::sort
(它将对您的日志文件名进行排序,以便最早出现在前面),然后删除N-2 第一项。工作完成。
但对于一些一般性建议:
现在一般的建议似乎是 std::vector
比 std::list
更好,甚至在很多事情上 std::list
似乎对它有好处,主要是因为它是连续存储,对缓存更友好。
可以构建显示 std::list
更快的基准测试,但是如果您为所有内容选择 std::vector
就不会出错!
如果您需要随着时间的推移维护一个容器并且总是需要能够移除最小/最大的元素,std::priority_queue
可能是个好主意。
如果您需要在容器中找到 N 个最小/最大的项目,std::partial_sort
是一种算法;它会比完整的 std::sort
更快,因为它不会浪费精力对您不关心的元素进行排序。
但是对于像这样的所有一般性能问题,恐怕唯一正确的答案必须是“试试看”!
编辑:我最初建议使用 boost::circular_buffer
因为问题听起来就是这样,但现在很明显这不是一个好的建议,因为需要通过排序而不是插入顺序来创建顺序.
关于c++ - 什么对我来说更好 : vector or list?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27298218/
我想使用 R 预定义这样的列表 DATA<-list( list(list(),list(),list()), list(list(),list(),list()), list(list(),l
如何将一个列表添加到另一个列表,返回一个列表的列表? foo :: [a] -> [a] -> [[a]] 例如,我想要的结果是: foo [1,2] [3,4] 将是 [[1,2], [3,4]]。
我还没有在这里找到类似问题的解决方案,所以我会寻求你的帮助。 有 2 个列表,其中之一是列表列表: categories = ['APPLE', 'ORANGE', 'BANANA'] test_re
这个问题不同于Converting list of lists / nested lists to list of lists without nesting (这会产生一组非常具体的响应,但无法解决
原始列表转换为 List正好。为什么原始列表的列表不能转换为 List 的列表? { // works List raw = null; List wild = raw; } {
在下面的代码中,get()被调用并将其结果分配给类型为 List> 的变量. get()返回 List>并在类型参数为 T 的实例上调用设置为 ? ,所以它应该适合。 import java.util
原始列表转换为 List正好。为什么原始列表的列表不能转换为 List 的列表? { // works List raw = null; List wild = raw; } {
在insufficiently-polymorphic 作者说: def foo[A](fst: List[A], snd: List[A]): List[A] There are fewer way
我有下面的代码有效。 class ListManipulate(val list: List, val blockCount: Int) { val result: MutableList>
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
在 scala (2.9) 中转换列表列表的最佳方法是什么? 我有一个 list : List[List[A]] 我想转换成 List[A] 如何递归地实现这一点?或者还有其他更好的办法吗? 最佳答案
我编写了这个函数来确定给定元素是否存储在元组列表的列表中,但目前它只搜索第一个列表。我将如何搜索其余列表? fun findItem (name : command, ((x,y)::firstlis
我创建了一个类名 objectA,它有 4 个变量:约会时间;字符串文本;变量 1,变量 2 我需要创建一个 ObjectA() 列表。然后首先按时间对它们进行分组,其次按 var1,然后按 var2
我有一套说法 char={'J','A'} 和列表的列表 content = [[1,'J', 2], [2, 'K', 3], [2, 'A', 3], [3,'A', 9], [5, 'J', 9
我有以下列表 List >>> titles = new ArrayList >>> ();我想访问它的元素,但我不知道该怎么做.. 该列表有 1 个元素,它又包含 3 个元素,这 3 个元素中的
转换 List[List[Long]] 的最佳方法是什么?到 List[List[Int]]在斯卡拉? 例如,给定以下类型列表 List[List[Long]] val l: List[List[Lo
我有一个来自 Filereader (String) 的 List-List,如何将其转换为 List-List (Double):我必须返回一个包含 line-Array 的第一个 Values 的
我收集了List> 。我需要将其转换为List> 。这是我尝试过的, List> dataOne = GetDataOne(); var dataTwo = dataOne.Select(x => x
这个问题在这里已经有了答案: Cannot convert from List to List> (3 个答案) 关闭 7 年前。 我没有得到这段代码以任何方式编译: List a = new Ar
这个问题在这里已经有了答案: Cannot convert from List to List> (3 个答案) 关闭 7 年前。 我没有得到这段代码以任何方式编译: List a = new Ar
我是一名优秀的程序员,十分优秀!