記憶はstd::array
連続していますか?次の有効/グッドプラクティスはありますか?
std::array<type1,Num> arr = //initialize value
type1 * ptr = &arr[0];
ptr
次に、cスタイルの配列を期待する関数に渡すことができますか?
記憶はstd::array
連続していますか?次の有効/グッドプラクティスはありますか?
std::array<type1,Num> arr = //initialize value
type1 * ptr = &arr[0];
ptr
次に、cスタイルの配列を期待する関数に渡すことができますか?
はい、基本的に(そして実際には)atype arr[10];
であるため、連続していますが、STLのようなインターフェイスを備えています。それはまた、わずかな挑発の指針に衰えることもありません。
&arr[0]
Cスタイルの配列を期待する関数に安全に渡すことができます。これがその設計目標です。ただし、STLアルゴリズムで使用するには、begin
andend
関数を使用するだけです。
// either members
std::sort(arr.begin(), arr.end());
// or free from <iterator>
std::sort(std::begin(arr), std::end(arr));
言語弁護士の部分については、§23.3.2.1 [array.overview] p1
:
ヘッダー
<array>
は、オブジェクトの固定サイズのシーケンスを格納するためのクラステンプレートを定義します。配列はランダムアクセスイテレータをサポートします。のインスタンスは、タイプの要素をarray<T, N>
格納するため、不変です。anの要素は連続して保存されます。つまり、がtheの場合、すべてののIDに従います。N
T
size() == N
array
a
array<T, N>
&a[n] == &a[0] + n
0 <= n < N
そして§23.3.2.1 [array.overview] p2
:
配列は、構文で初期化できる集合体(8.5.1)です。
array<T, N> a = {
イニシャライザリスト};
また、でp3
、のメンバーを一覧表示しstd::array
ます。
T elems[N]; // exposition only
[注:メンバー変数は、クラスの集合体であるelems
ことを強調するために、説明のためにのみ示されています。array
名前はのインターフェースのelems
一部ではありません。—エンドノート]array
はい、の記憶std::array
は連続しています。VC10では、次のように宣言されています。
template<class _Ty,
size_t _Size>
class array
{ // fixed size array of values
...
_Ty _Elems[_Size == 0 ? 1 : _Size];
};
与え_Elemes
られたタイプの単純な配列に他なりません。