我有一個函數讀取文件夾中的文件(我正在使用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