4

などのインデックス付けのように、matlab を使用して C++ 配列にアクセスすることを考えていa[1 , :]ます。とても便利です。

演算子 [] をオーバーロードしましたが、a[1, : ]構文を持つことはできないようです。

私が見つけた解決策は、C++ ソース コードを前処理しa[1, :]col(a, 1). しかし、これは手間がかかるようです。

誰かがより良い解決策を持っていますか? ありがとう!!

4

2 に答える 2

6

私が見つけた解決策は、C++ ソース コードを前処理し、a[1, :] を col(a, 1) などの C++ 関数に変換するスクリプトを作成することです。しかし、これは手間がかかるようです。

また、壊れやすく、エラーが発生しやすく、複雑さが増し、バグが増え、わかりにくくなります。マクロを使用したほうがよいでしょう (そのようなマクロは絶対に使用しないでください)。

誰かがより良い解決策を持っていますか?

必要な機能を単純に追加することを検討しましたか? 構文は配列インデックスを使用しませんが、コードを見ている人なら誰でも (今から 2 年後の自分を含めて)、明示的 (関数名が関数の動作を示すため) になじみのあるものになります。

于 2013-09-04T11:09:38.580 に答える
3

Boost マルチ アレイは、1 インデックスとカラム ビューの両方を提供します。range()matlab operator を置き換えます:

ドキュメントのこの例のように配列ビューを定義することもできます

myarray[ boost::indices[range()][range() < 5 ][4 <= range().stride(2) <= 7] ]

これはmatlabと同等です

myarray(:,1:4,4:2:7)
于 2013-09-04T11:43:04.677 に答える