std :: deque <std :: string>有效地计算内存中的大小</std :: string>

时间:2014-04-30 15:19:54

标签: c++ stl

我一直在研究基本日志文件类,一旦达到设置大小限制(例如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所占用的实际大小,而不是像我现在那样手动操作。

谢谢 - 了解更多信息。

2 个答案:

答案 0 :(得分:3)

您自己的班级将拥有std::deque内存大小计数器并监控插入(例如,添加插入计数器的内存大小)和提取(例如,减去大小)从计数器中提取的内存。)

答案 1 :(得分:1)

现在,您已经多次将这些尺寸相加。这不是必要的。

你可以

  • 将所有尺寸相加,然后在每次移除项目时调整总数

  • 从尾部开始反向添加大小,一旦达到阈值,删除该点到开头的所有项目