multi_array の要素数

解決


しゅいんず  2008-06-12 05:00:52  No: 68531

こんにちは。
多次元配列で multi_array を使い始めたのですが、

boost::multi_array< int, 2 > array ;

array.resize( boost::extents[ 3 ][ 5 ] ) ;

としたとき、array から要素数 3 と 5 を取得するにはどのようにしたらよいのでしょうか ?

array.size() で 3 は取得でき、array[ 0 ].size() で 5 は取得できのですが、boost::extents[ 0 ][ 5 ] となった場合 5 は取得できません。

どなたかご存じの方がいらっしゃいましたら教えていただけないでしょうか。
よろしくお願いします。


アキラ  URL  2008-06-12 21:12:42  No: 68532

えーと、この問題は
> array から要素数 3 と 5 を取得するには

これで解決してるからいいとして
> array.size() で 3 は取得でき、array[ 0 ].size() で 5 は取得でき

> boost::extents[ 0 ][ 5 ] となった場合 5 は取得できません
これは、0番目の要素数が0個なんだから当然じゃないかと思います。
範囲外アクセスですよね。


しゅいんず  2008-06-13 05:15:44  No: 68533

アキラ さんこんにちは。レスありがとうございます。

範囲外アクセスというのは分かります。
array.resize( boost::extents[ 0 ][ 5 ] ) ;
としたときに、特に例外が発生しているような感じでもないので、
何らかの形で 5 を取得できないものかと思い質問させていただきました。

これはやはり配列をどのくらいで確保したか別途に覚えておく必要が
あるのでしょうか ?


アキラ  URL  2008-06-13 18:39:24  No: 68534

boost::extents[ 0 ][ 5 ]
たぶん、この使い方は想定されていないので
要素数0がありえていいなら、要素数を変数で持つ必要があると思います。


しゅいんず  2008-06-14 05:10:03  No: 68535

アキラ さんこんにちは。

なるほど。想定外なのですか。そこは気がつきませんでした。
もし 0 を扱うようならば値を保持するようにしたいと思います。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加