std::stringstreamをクリアする
やり方
すごく初歩的な事だけど、最近知ったので。
std::stringstreamに格納されてる値をクリアにして別の値を入れる時に必要な処理
#include <iostream> #include <sstream> using namespace std; int main(int argc, char* argv[]){ stringstream ss; ss << "hoge"; cout << ss.str() << endl; //ssをクリアする ss.str(""); ss.clear(stringstream::goodbit); ss << "fuga"; cout << ss.str() << endl; return 0; }
hoge fuga
使ってみた
data L dir1 L file1.dat dir2 L file2.dat dir3 L file3.dat dir4 L file4.dat
みたいなディレクトリ階層を作って、各ディレクトリのfile*.datを見るプログラムを作ってみた。
各file*.datにはファイルパスを書いておく。
#include <iostream> #include <sstream> #include <fstream> using namespace std; int main(int argc, char* argv[]){ stringstream dir; string path = "./data/dir"; string file = "file" for(int i = 0; i < 4; i++){ dir << path << i+1 << "/" << file << i+1 << ".dat"; ifstream ifs(dir.str().c_str()); string line; while(getline(ifs, line)){ cout << line << endl; } dir.str(""); dir.clear(stringstream::goodbit); } return 0; }
./data/dir1/file1.dat ./data/dir2/file2.dat ./data/dir3/file3.dat ./data/dir4/file4.dat
といった感じ。
OpenCVとかで作った行列データをyamlにして別々のディレクトリに保存したり読みだしたりする場合とかに使える。
(std::ifstreamのところはdir.str().c_str()としててちょっとアレだけど…)