[英]std::deque<std::string> count size in memory efficiently
我一直在研究一個基本的日志文件類,一旦達到設置的大小限制(例如10Mb),它將被截斷20%,我決定將文件存儲到stringstream緩沖區中,然后逐個日志地將其存儲到std ::中: deque(使用std :: deque代替std :: vector,因此我可以輕松地從結構頂部彈出,而不必進行排序等)加載和存儲如下所示:
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)時會被截斷,因此我真正想做的是檢查vLogs中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 :: strings占用的實際大小,而不是像現在這樣手動進行操作。
謝謝-任何更多的信息,只是問。
自己做一個具有std::deque
和內存大小計數器的類,並監視插入(例如,增加插入到計數器中的內存大小)和提取(例如,減去從計數器中提取的內存大小)。
現在,您要多次累加大小。 沒必要
你可以
要么
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.