progress_display可以用作基本的进度显示,但它有个固有的缺陷:无法把进度显示输出与程序的输出分离。
这是因为progress_display和所有C++程序一样,都向标准输出(cout)输出字符,如果使用progress_display的程序也有输出操作,那么progress_display的进度显示就会一片混乱。
一个解决办法是每次显示进度时都调用restart()重新显示进度刻度,然后用operator+=来指定当前进度,而不是简单的调用operator++
#include <boost imer.hpp> #include <boostprogress.hpp> #include <boostprogress.hpp> #include <vector> #include <fstream> #include <booststatic_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); } }