2016-07-22 12 views
1

"inside"の配列をstd::vectorにしようとしています。.begin()と.end()イテレータから配列を取得

私はC++をよく知らないので、基本的に配列(最初の要素のポインタiirc)とサイズを取得するスニペットを探しています。配列の内容をOpenACC経由でアクセラレータデバイスに転送したいので、これが必要です。

私が操作するはずの機能から得たものは、の先頭と最後にのRAイテレータが2つあります。

これらのすべてが連続しているわけではありませんが、私が作成するコードは純粋に学問的なものになるため、今は問題ではありません。

+1

あなたは 'vector.data()'を意味しますか? – DimChtz

+0

問題は、自分のコンテキストにベクトルオブジェクトがないことです。私は、vector.begin()とvector.end()の結果だけを取得します。 –

答えて

3

std::vectorは、メモリ内で連続であることが保証されます。 (読み:へのポインタ)あなたはのアドレスを取得することができ、.begin().end()からサイズを取得するために

&a.first() 

とより簡単に

&*a.begin() 

かとの最初の要素を使用し

a.end() - a.begin() 
+0

私はあなたの答えをdownvotedしました。私はそれを投票することができるようにあなたの答えを編集できますか? –

1
myArray[myvector.end() - myvector.begin()] 
for (std::vector<int>::iterator it = myvector.begin(), int i = 0; it!=myvector.end(); ++it, ++i) 
     myArray[i] = myvector[i]// or whatever you want 

これはイテレータを使用する方法です。開始条件と終了条件があるので、必ずループを使用してください。

+0

これはどのようにして質問に答えますか? OPは、2つのイテレータから基礎となるデータを取得する方法を求めています。イテレータを使用してコンテナをループする方法を単に示しています。 – Holt

+0

@Holt私の編集はそれをより明確にしますか? –

+0

これは、ベクトルからデータをコピーして配列にもコピーしますが、それは私のためのオプションではないので、インプレースで作業する必要があります。あなたの答えは他人のために働くかもしれません。 –

2

ベクトル全体が必要な場合はvector.data()があなたの友人です。あなたはそれの一部のみが必要な場合は

:それは問題ではありませんので

std::vector<X>::iterator it1 = ... , it2 = ...; 
X* item = &(*it1); 
int elements = it2 - it1; 
関連する問題