最新のC++ワーキングドラフトによると、中(n3376については
)for文の範囲であったが、以下に相当します。
{
auto && __range = range-init;
for (auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin) {
for-range-declaration = *__begin;
statement
}
}
は、だから、イテレータを使用して定期的にfor
ループと同じ方法を停止する方法を知っています。
私はあなただけのポインタとサイズ(動的配列)から構成され配列で上記の構文を使用する方法を提供するために、次のようなものを探しているかもしれないと思う:
template <typename T>
class Range
{
public:
Range(T* collection, size_t size) :
mCollection(collection), mSize(size)
{
}
T* begin() { return &mCollection[0]; }
T* end() { return &mCollection[mSize]; }
private:
T* mCollection;
size_t mSize;
};
このクラステンプレートをすることができます新しいの範囲をの構文で使用して反復できる範囲を作成するために使用されます。私はこれを使用して、配列へのポインタとサイズを別々の値として返すライブラリを使ってインポートされたシーン内のすべてのアニメーションオブジェクトを実行しています。
for (auto pAnimation : Range<aiAnimation*>(pScene->mAnimations, pScene->mNumAnimations))
{
// Do something with each pAnimation instance here
}
この構文は、私の意見では、あなたがstd::for_each
またはプレーンfor
ループを使用してになるだろう何よりもはるかに明確です。
CまたはC++自体には "動的な"配列はありません。配列型があり、配列や動的に割り当てられたブロックを指しても指していなくてもよく、主に配列のように動作するポインタがあります。型T [n]の配列の場合、そのサイズは型で符号化され、 'for'でアクセスできます。しかし、配列がポインタに崩壊すると、サイズ情報は失われます。 – JohannesD
あなたの例では、 'numbers'の要素の数は' sizeof(numbers)/ sizeof(int) 'です。 – JohannesD