我一直在研究基本日志文件类,一旦达到设置大小限制(例如10Mb)就会截断20%,我决定将文件存储到字符串流缓冲区中,然后通过日志将日志存储到日志中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)时会截断,所以我真正想做的是检查std :: string在vLogs中的大小 - 我可以通过以下方式进行操作:
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所占用的实际大小,而不是像我现在那样手动操作。
谢谢 - 了解更多信息。
答案 0 :(得分:3)
您自己的班级将拥有std::deque
和内存大小计数器并监控插入(例如,添加插入计数器的内存大小)和提取(例如,减去大小)从计数器中提取的内存。)
答案 1 :(得分:1)
现在,您已经多次将这些尺寸相加。这不是必要的。
你可以
或