我有一个函数读取文件夹中的文件(我正在使用boost)。我也试图只保留2个文件(它们是日志文件,所以它们被旋转,并且我不想在第三个文件中保留旧的日志=日志)。我将这些文件的名字存储在一个列表中,但是因为读取操作没有按照创建时间顺序完成,所以我需要对列表进行排序。我的情况最好是什么:矢量还是列表?
我知道
载体擅长:
- 通过访问他们的位置索引(固定时间)单个元素。
- 以任意顺序(线性时间)对元素进行迭代。
- 从其末尾添加和移除元素(恒定分摊时间)。
和
优点列出容器:
- 高效插入和移除元件的容器中的 (恒定的时间)的任何地方。
- 高效的移动元素和容器内或甚至不同容器之间的元素块(恒定时间)。
- 以正向或反向顺序(线性时间)对元素进行迭代。
我不知道什么是做到这一点的最好办法:使用列表或载体?
要我
- 使用矢量和排序它上升,从端删除,添加新元素(在结束时),重新排序等; 或
- 使用列表并对其进行升序排序,从头开始删除,在结尾添加新元素,度假村等;
- 是排序,只需要在开始的时候,因为我每次插入文件名是最后创建的?
- 如果列表/向量是排序的,那么什么时候使用它?
- 如果我使用
std::is_sorted
可以不分拣每次吗?
一些更多的信息:
由于升压的文件旋转没有“删除文件,如果太多”状态,只有“有磁盘空间不足”,我有实现了保留最后两个文件的这一步骤,或者在每次创建新文件时移除最老的文件,并且有2个日志文件。所以每次创建一个新的日志文件时,我都会验证文件列表,如果有足够的文件(2个或更多),只需删除较旧的文件。由于该文件的名称是logs_%N.log
,我不知道,如果该文件logs_X1.log
是年龄超过logs_X2.log
如:我重新启动应用程序,还有文件logs_51.log,logs_52.log,其中之一是要被删除?假设它将删除logs_51.log并创建logs_0.log,如果我再次重新启动它,将会有logs_52.log和logs_0.log。哪一个是现在要被删除?)
这就是为什么我需要的那种,因为应用程序可能会重新启动,而我读的现有文件,完成有更多的空间,然后创建一个新的一个。
如果只有两个文件,排序的目的是甚么,甚至有一个容器? – dasblinkenlight 2014-12-04 15:57:11
我说这个差别不足以担心。您正在优化需要很少时间的事情。而且它不像你会在循环中调用数十亿次。 – drescherjm 2014-12-04 16:01:17
'使用向量并对其进行升序排序,从最后删除,添加新元素(最后),重新排序等等是没有意义的。在开始处插入比在末尾插入和排序要快得多。 – user2079303 2014-12-04 16:01:24