progress_display能夠用做基本的進度顯示,但它有個固有的缺陷:沒法把進度顯示輸出與程序的輸出分離。ios
這是由於progress_display和全部C++程序同樣,都向標準輸出(cout)輸出字符,若是使用progress_display的程序也有輸出操做,那麼progress_display的進度顯示就會一片混亂。spa
一個解決辦法是每次顯示進度時都調用restart()從新顯示進度刻度,而後用operator+=來指定當前進度,而不是簡單的調用operator++rest
#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); } }