我一直工作在其20%截斷,一旦達到設定的作爲大小限制(例如10MB),一個基本的日誌文件類,我決定將文件存儲到一個字符串流緩衝器中,然後存儲它記錄由登錄到一個std ::雙端隊列(使用一個std ::雙端隊列來代替std ::矢量所以可以很容易地從該結構的頂部彈出,而不必進行排序等)的加載和存儲是如下圖所示:的std ::在內存雙端隊列<std::string>計數尺寸有效
std::deque<std::string> vLogs;
std::stringstream ssBuffer;
std::string sLog;
ssBuffer << in.rdbuf();
in.close();
while(getline(ssBuffer,sLog))
vLogs.push_back(sLog);
日誌文件的設計,所以當它達到設定大小(例如10MB),所以我真正想要做的是檢查多大的std :: string的是視頻博客內截斷它 - 我可以採用以下方式:
int nSize = 0;
for(auto it = vLogs.begin(); it != vLogs.end(); ++it)
nSize += it->size();
do{
nSize -= vLogs.front().size();
vLogs.pop_front();
}while(nSize > (MAX_SIZE * 0.8));
我問的問題是,是否有一個更有效的方式來獲取std ::字符串佔用的實際大小,而不是像現在這樣手動執行。
感謝 - 任何詳細信息,只問。
做你自己的類,將有一個'的std :: deque'和**內存大小計數器**和顯示器插入(例如添加的內存插入到櫃檯大小)和提取(例如,減去的內存大小從櫃檯提取)。 – 101010
您是否可以讓您的deque成爲日誌記錄類的成員,並在每次推送和彈出時更新總大小,這樣您始終可以將大小保持在最新狀態,並且如果新項目日誌大小添加到總數超過閾值那麼你彈出,直到總數低於閾值 – EdChum
是的,我認爲你們都把它釘在頭上 - 我忽略了這一點,因爲我的過度簡化的方法 - 創建一個答案,我會接受。 – Mike