vector < T > ::iterator のような表現はTが値か型か確定しないと解釈できないので
typename vector < T > ::iterator
と表記する。
vector < T* > ::iterator でも通る。
2008年2月24日日曜日
2008年2月18日月曜日
boost::xpressive でも警告
boost::ublasと同様にboost::xpressive::sregexもインスタンス化するとその場所で、コピーコンストラクタで初期化していない、という警告が出る。
boost 1.35以降で修正されることを期待して今は放置。当面xpressiveよりregexを使った方が良いのか。
boost 1.35以降で修正されることを期待して今は放置。当面xpressiveよりregexを使った方が良いのか。
2008年2月17日日曜日
doxygen 雛型(prototype)
doxygenで関数のコメントを付けるときの雛型(prototype)。
/*! \brief 短い説明
関数の詳しい説明
\param[in] 引数名1 引数1の説明
\param[in, out] 引数名2 引数2の説明
\retval 返り値 返り値の説明
\note 注釈
*/
- で箇条書き
-# で番号つき箇条書き
- sakuraエディタのdoxygenコメント方式(Qtスタイル)にする
- ソースとヘッダ両方に記述がある場合、ソースに付ける。
- ヘッダには\brief か非doxygenコメント
/*! \brief 短い説明
関数の詳しい説明
\param[in] 引数名1 引数1の説明
\param[in, out] 引数名2 引数2の説明
\retval 返り値 返り値の説明
\note 注釈
*/
- で箇条書き
-# で番号つき箇条書き
boost::numeric::ublas::matrixを使ってみる。
重要(FAQより)
生成
メンバ関数にあるもの
演算子オーバーロードされているもの
boost::numeric::ublas 以下にはmatrixに限らない、基本的な演算のための非メンバの関数が置かれている
- パフォーマンスが必要な場合はコンパイル時に必ずNDEBUGを定義する→expression templateが有効になる。
- 行列の積の積 prod(A, prod(B, C))がexpression templateにより遅くなる場合
prod (A,
matrix_type
(prod (B, C)))
やprod (A, prod <
matrix_type
> (B, C))
のようにして明示的に一時行列を導入すれば良い。(メモリ使用量は増える)
- 要素への配列風アクセスも定義されているが一時オブジェクトが必要になるので(メモリ量的に)高くつく場合がある。(ublas overviewのcompatibilityより)
生成
- 引数なしコンストラクタで0,0要素行列の生成 → resize(n,m)でn行m列に変形
- コンストラクタ(n,m)でn行m列 行列を生成させる。
メンバ関数にあるもの
- insert, resize, clear 等コンテナに共通する操作
- イテレータ関連
演算子オーバーロードされているもの
- スカラーと行列の四則演算
- 行列同士の代入、加減
- ストリームへの << 等はboost/numeric/ublas/io.hppで定義
boost::numeric::ublas 以下にはmatrixに限らない、基本的な演算のための非メンバの関数が置かれている
- prod ベクトル/行列とベクトル/行列の乗算
- trans 転置
2008年2月15日金曜日
boost::ublas のコンテナでコンパイル時警告
boost::numeric::ublas::matrix を宣言・代入し、returnすると
という警告が出る。インターネットで調べると
boost::numeric::ublas::vectorでの同様の警告に関する話題あり。
matrix なりvectorなりのコピーコンストラクタが基底クラス storage_array の初期化に失敗している様子。というか初期化していない。(エラーメッセージそのままだけど)
vectorの場合 boost/numeric/ublas/storage.hppの92行目と93行目の間に
と挿入すれば警告は消える。無視して次のリリースでの修正を待っても問題なさそう。
と書いてある。
しかし実際変更するとのtemplate引数は1つだというエラーが出るので
が正解と思われる。 boost 1.34 + g++4.1.2
base class ‘class boost::numeric::ublas::storage_array (略)’ should be explicitly initialized in the copy constructor
という警告が出る。インターネットで調べると
boost::numeric::ublas::vectorでの同様の警告に関する話題あり。
matrix なりvectorなりのコピーコンストラクタが基底クラス storage_array の初期化に失敗している様子。というか初期化していない。(エラーメッセージそのままだけど)
vectorの場合 boost/numeric/ublas/storage.hppの92行目と93行目の間に
storage_array < self_type,ALLOC > (),
と挿入すれば警告は消える。無視して次のリリースでの修正を待っても問題なさそう。
と書いてある。
しかし実際変更するとのtemplate引数は1つだというエラーが出るので
storage_array < self_type > (),
が正解と思われる。 boost 1.34 + g++4.1.2
2008年2月14日木曜日
現時点でのMCNPの拡張点
とりあえず入力ファイル読み取りの時点で考慮した、MCNPからの拡張を挙げる
- READ カード:READ FILE=ファイル名 によるインクルードを採用(MCNPXでは既採用)
- 多段インクルード:READ FILEで取り込んだファイル内でのREADカードを受け付ける
- 前置継続指示(行頭空白5文字)と後置継続指示(&文字)が重複してもOK
- m表現での浮動小数点形式を受け付ける:例、 1.5e2m は150mに解釈される。
- 入力ファイルは小文字大文字は区別されるが、カード名では区別が無い。sDeFみたいな入力がOK.
2008年2月4日月曜日
boost::regex
smatch.position() はパターン該当部分の最初の位置を示す。
で文字列中のパターン該当部(パターン含む)以降を削除できる。
string str=" I want something to drink.";
regex pattern("something");
smatch m;
regex_search( str, m );
str.substr( 0, m.position() );
で文字列中のパターン該当部(パターン含む)以降を削除できる。
2008年2月3日日曜日
boost::lexical_cast
lexical_cast("6.02E23") 等浮動小数点数のキャストもOK
ただし、文字列前後に空白を含んでいるとキャスト失敗で、 bad_lexical_cast が投げられる。(boost 1.33。後のバージョンでは空白は適当に解釈されるというwebページを見た気がする。要確認)
定倍の1.5m 等の表記をlexical_castで変換すれば1.5e2mのような表記もアリ。
ただし、文字列前後に空白を含んでいるとキャスト失敗で、 bad_lexical_cast が投げられる。(boost 1.33。後のバージョンでは空白は適当に解釈されるというwebページを見た気がする。要確認)
定倍の1.5m 等の表記をlexical_castで変換すれば1.5e2mのような表記もアリ。
登録:
投稿 (Atom)