C++では stringstream は非推奨。
sstreamをインクルード。
出力にはostringstream を使用。
2008年5月4日日曜日
2008年4月21日月曜日
svn+sshの注意点
svn+sshでアクセスする場合ユーザー定義のPATHは適用できない。
svn+sshでアクセスする場合はログインシェルすら起動されないため.bash_profile等の設定も有効にならない。
→subversionが指定する独自のPATHに含まれていなければならない。/usr/bin等は無理なので$HOME/binにリンクを貼る。
svn+sshでアクセスする場合はログインシェルすら起動されないため.bash_profile等の設定も有効にならない。
→subversionが指定する独自のPATHに含まれていなければならない。/usr/bin等は無理なので$HOME/binにリンクを貼る。
2008年4月13日日曜日
boostのunit_testがコンパイルできない。
- BOOST_AUTO_TEST_MAIN() は1.34以降ではBOOST_AUTO_TEST_CASEになる。
- #define BOOST_AUTO_TEST_MAIN → #define BOOST_TEST_MAIN
- ユニットテストがオフィシャルのサンプルすらコンパイルできない → Shared 版 Boost.Testはmain関数を含まないので Static版をリンクしなければならない。
×g++ -lboost_unit_test_framework -static example.cpp
○g++ example.cpp -lboost_unit_test_framework -static
こんな感じ。(ただし< とboost/test〜の間に空白を入れないこと)
#define BOOST_TEST_MAIN
#include < boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE( test1 )
{
// テスト開始
BOOST_CHECK_EQUAL( 0, 1 );
}
2008年3月10日月曜日
subversion メモ
subversive, subclipse 共にeclipse3.3(jre16), eclipse-fedora3.3(gcc-java)どちらでも落ちまくって使い物にならないので諦めてEclipseのsubversionプラグインは使わないことにする。
→Javaを1.5に落とせば解決した。
1.レポジトリ作成。レポジトリを作成するsubvesionサーバーで実行
2.プロジェクトの(インポートによる)trunkの作成
3.チェックアウトによるtrunkの作業コピー作成(checkout はcoと略せる。略称は svn helpで見られる)
4.コミットによるレポジトリの更新。作業コピーのコミットする対象ディレクトリで
以下3. 4.の繰り返し。
便利なコマンド
svn status ファイル名 :ファイルがcheckoutした時点から変更されているかチェック
svn status --show-updates :ファイルがレポジトリのものから変更されているかチェック
svn diff ファイル名 :現在のcheckoutした時点の作業コピーファイルと現在のファイルとの差分
svn diff -rHEAD ファイル名 :レポジトリのファイルと現在のファイルとの差分
svn log ファイル名 :ファイルの変更履歴
svn update :レポジトリとの同期
svn update ディレクトリ名 :部分的に同期を取る場合
svn info デイレクトリ名 :ディレクトリの情報 。ディレクトリ名を省略するとカレントディレクトリになる。
svn move 元ファイル名 新ファイル名 :ファイル名の変更
svn propedit svn:ignore ディレクトリ名 :svn管理下のファイルに無視属性をつけて同期対象外にする。
→Javaを1.5に落とせば解決した。
1.レポジトリ作成。レポジトリを作成するsubvesionサーバーで実行
svnadmin create レポジトリのトップディレクトリ
2.プロジェクトの(インポートによる)trunkの作成
svn import -m "任意のメッセージ" インポートするソースディレクトリ file:///レポジトリのトップ/プロジェクト名/trunk
3.チェックアウトによるtrunkの作業コピー作成(checkout はcoと略せる。略称は svn helpで見られる)
svn checkout file:///レポジトリトップ/プロジェクト名/trunk 作業コピーディレクトリ名
4.コミットによるレポジトリの更新。作業コピーのコミットする対象ディレクトリで
svn commit -m "任意のメッセージ"
以下3. 4.の繰り返し。
便利なコマンド
svn status ファイル名 :ファイルがcheckoutした時点から変更されているかチェック
svn status --show-updates :ファイルがレポジトリのものから変更されているかチェック
svn diff ファイル名 :現在のcheckoutした時点の作業コピーファイルと現在のファイルとの差分
svn diff -rHEAD ファイル名 :レポジトリのファイルと現在のファイルとの差分
svn log ファイル名 :ファイルの変更履歴
svn update :レポジトリとの同期
svn update ディレクトリ名 :部分的に同期を取る場合
svn info デイレクトリ名 :ディレクトリの情報 。ディレクトリ名を省略するとカレントディレクトリになる。
svn move 元ファイル名 新ファイル名 :ファイル名の変更
svn propedit svn:ignore ディレクトリ名 :svn管理下のファイルに無視属性をつけて同期対象外にする。
2008年2月24日日曜日
テンプレートのイテレータ
vector < T > ::iterator のような表現はTが値か型か確定しないと解釈できないので
typename vector < T > ::iterator
と表記する。
vector < T* > ::iterator でも通る。
typename vector < T > ::iterator
と表記する。
vector < T* > ::iterator でも通る。
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)