C++配列でイテレータを使用したいが、生ポインタも使用したい。 私は、静的なベクターを用いて行うことができます。stl :: rawポインタ付きイテレータ
#define SIZE 10
int vect[SIZE] = {0};
vect[3] = 5;
int* p = std::find(std::begin(vect), std::end(vect), 5);
bool success = p != std::end(vect);
はどのように生のポインタ(多分ヒープが割り当てられたベクトル)でそれを行うことが可能になることができますか? もちろんコンパイラは、データのサイズを知らないので、このコード
int* pStart = vect;
std::find(std::begin(pStart), std::end(pStart), 5);
は
error C2784: '_Ty *std::begin(_Ty (&)[_Size])' :
could not deduce template argument for '_Ty (&)[_Size]' from 'int *'
を与えることのbegin()
とend()
に認識させることが可能ですか?ここで
どのように_what_を行うことができますか?あなたは何を達成しようとしていますか?あなたの目標は何ですか? –
代わりに 'std :: array'を使います。これはC配列のすべての機能を持ちますが、実際にはSTLインタフェースを持っています。そしてイテレータはポインタとして実装されています。 – rlbond
@rlbondこの場合を除いて、プレーンな配列は完全に素晴らしいです。 – juanchopanza