STLについて
本名 Standard Template Library であり,C++における標準ライブラリの一つ.[std]というものを君は見たことがあるか!?
超簡単用語解説
イテレータ : ポインタみたいなもの.厳密には違うが大体こんなものだと理解してね.
type : プログラム上で使ってますが,これを好きな型(int, double)に変えて使います
基本 (前座)
簡単に説明する.簡単に説明するので厳密には違う点もあるが,あくまでも簡単だ.
- std::vector #include <vector>
c言語における配列に近いもの.可変長の動的配列であり,なんやかんやで頼りになる奴.
reference
他サイト説明(割りと詳しめ)
使用例std::vector<int> x; //int型の大きさ0の配列 std::vector<double> v(4); //double型の大きさ4の配列 std::vector<double> v(4,0); // double型の大きさ4の配列で全てに0を格納 v.push_back(100); //vの末尾の後ろに新しく値 100 を追加 //v = { non, non, non, non, 100 } (non = 値なし) v.reserve(126);//領域を126分確保,ただし配列の幅は変わらない. v.resize(100);//配列の幅を100に変更 v.size();//現在の配列幅の値を返す. v[num] = 100.; //num番目に100代入 double value = v[num];//num番目の値を参照する
基本的には初めにvectorの大きさを決めて使うか,push_backのメンバ関数で配列の後ろに値をどんどん足していく使い方が主になると思います.//push_backの動作を詳しめに std::vector<double> v; v.push_back(1);// v[0] = 1; v.push_back(2);// v[0] = 1; v[1] = 2; v.push_back(3);// v[0] = 1; v[1] = 2; v[2] = 3;
- std::string #include <string>
文字列の管理ならお手の物.もうchar*には帰れない.
最大の特徴は演算子"+"が使えること. referencestd::string str; str = "hoge" + "aho"; // str == "hogeaho" char* c = str.c_str(); // これでchar型の文字列を呼び出す.よく使う. std::cout << str << std::endl; //標準出力 -> 次で説明する
- std::cout #include <iostream>
cで言うprintfにあたる.細かい出力設定はprintfには劣るがc++の基本出力.[scanf]にあたる[std::cin]もある.
特徴として出力の型を指定する必要がない.
reference
reference(English) <-一番詳しそうだったので
http://www.sist.ac.jp/~suganuma/cpp/3-bu/16-sho/16-sho.htm <-- memostd::cout << "hoge" << std::endl; // "hoge\n"と出力 std::endl は"\n"に当たる std::cout << "hoge\n";//これでも改行される //boostがあれば #include <boost/format.hpp> std::cout << "hoge " << boost::format("aho %d %lf") % num % value << std::endl; //printf風味を醸し出しつつ,coutを使える std::cerr << "hoge" << std::endl;// 標準エラー出力 std::cin >> value; // 入力
本番
参照 http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi
- std::accumulate #include <numeric>
vectorの中身の和を出す.std::vector<double> v(4); //vに値を詰める std::accumulate( v.begin(), v.end(), 0.0); // accumulate( 始めのイテレター, 最後のイテレーター, 初期値)
これは色々改造で来たりしちゃいます.
- std::sort #include <algorithm>
vector内のソート( std::partial_sort 部分ソート )std::vector<int> data; //data入力 std::sort( data.begin(), data.end());// 基本は昇順 std::sort(data.begin(),data.end(),std::greater<int>());//降順ソート //#include <functional> std::sort(v.rbegin(), v.rend());//降順ソート
と色々あります.もちろん"std::greater<int>()"の部分(比較関数)を自分で作ることも可能です.
以下こんな感じstruct Sorter_less{ bool operator()(const type& a, const type& b)const{ return a<b; } }; int hoge(){ std::vector< type> v; //データ入力 std::sort( v.begin(), v.end(), Sorter_less); }
memo
struct UblasEigenVVSorter : std::binary_function <std::pair<double, ublas::vector<double> >, std::pair<double, ublas::vector<double> >, bool> { bool operator()(const std::pair<double, ublas::vector<double> >& lhs, std::pair<double, ublas::vector<double> >& rhs) { return lhs.first > rhs.first; } }; std::vector<std::pair<double, ublas::vector<double> > > pairs; for (std::size_t i = 0; i < eigen.size(); ++i) { pairs.push_back(std::make_pair(eigen[i], eigenv[i])); } std::sort(pairs.begin(), pairs.end(), UblasEigenVVSorter());
関数アダプタ
理解したら書く
http://www.geocities.jp/ky_webid/cpp/library/025.html
std::binary_function
unary_function