Boost学习笔记(六) progress_display注意事项

progress_display可以用作基本的进度显示,但它有个固有的缺陷:无法把进度显示输出与程序的输出分离。

  这是因为progress_display和所有C++程序一样,都向标准输出(cout)输出字符,如果使用progress_display的程序也有输出操作,那么progress_display的进度显示就会一片混乱。

  一个解决办法是每次显示进度时都调用restart()重新显示进度刻度,然后用operator+=来指定当前进度,而不是简单的调用operator++

#include <boost\timer.hpp>
#include  <boost\progress.hpp>
#include <boost\progress.hpp>
#include <vector>
#include <fstream>
#include <boost\static_assert.hpp>
#include <iostream>
using namespace boost;
using namespace std;

int main()
{
    vector<string> v(100,"aaa");  //一个字符串向量
    
    v[10]="";
    v[23]="";

    ofstream fs("c:\\test.txt"); //文件输出 流
    progress_display pd(v.size());  //声明一个progress_display对象,基数是v的大小

    vector<string>::iterator pos;  //迭代器
    //开始写入文件
    for(pos=v.begin();pos!=v.end();++pos)
    {
        fs<<*pos<<endl;
        ++pd;
        if(pos->empty())
        {
            cout<<"null string #"<<(pos-v.begin())<<endl;
        }
        pd.restart(v.size());
        pd+=(pos-v.begin()+1);
    }
}

 

 

posted @ 2016-11-20 14:31  未来,已来  阅读(965)  评论(0编辑  收藏  举报