2016-07-22 8 views
1

Ich versuche, das Array "innen" ein std::vector zu bekommen.Get Array von. Begin() und. End() Iteratoren

Ich weiß nicht, C++ so gut, im Grunde bin ich auf der Suche nach einem Schnipsel, um das Array (das ist der Zeiger auf das erste Element, Iirc) und die Größe. Ich brauche das, weil ich den Inhalt des Arrays zu einem Beschleunigergerät über OpenACC übertragen möchte.

Alles, was ich von der Funktion bekomme ich manipulieren soll, sind zwei RA-Iteratoren für den Anfang und das Ende der Daten.

Ich weiß, dass nicht alle von ihnen zusammenhängend sein müssen, aber der Code, den ich produzieren werde, wird rein akademisch sein, also sollte das kein Problem für jetzt sein.

+1

Du meinst 'vector.data()'? – DimChtz

+0

Das Problem ist, dass ich das Vektorobjekt in meinem Kontext nicht habe. Ich bekomme nur die Ergebnisse von vector.begin() und vector.end(). –

Antwort

3

A std::vector ist garantiert im Speicher zusammenhängend sein, so dass kein Problem sein sollte. Sie können die Adresse zu bekommen (sprich: Zeiger auf) das erste Element mit

&*a.begin() 

oder leichter mit

&a.first() 

Um die Größe von .begin() und .end() zu erhalten, verwenden

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

Ich habe deine Antwort abgelehnt. Können Sie Ihre Antwort bearbeiten, damit ich sie abstimmen kann? –

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 

So verwenden Sie die Iteratoren; Stellen Sie sicher, dass Sie eine Schleife verwenden, da Sie die Anfangsbedingung und die Endbedingung haben.

+0

Wie beantwortet das die Frage? OP fragt nach einer Möglichkeit, die zugrunde liegenden Daten von zwei Iteratoren abzurufen, und Sie zeigen einfach, wie Sie einen Container mithilfe von Iteratoren durchlaufen. – Holt

+0

@Holt Macht meine Bearbeitung es klarer? –

+0

Dies kopiert die Daten aus dem Vektor in das Array, was auch funktionieren würde, aber ich muss in-Place arbeiten, so dass dies keine Option für mich ist. Ihre Antwort könnte jedoch für andere funktionieren. –

2

Wenn Sie den gesamten Vektor möchten, ist vector.data() Ihr Freund.

Wenn Sie nur einen Teil davon brauchen:

std::vector<X>::iterator it1 = ... , it2 = ...; 
X* item = &(*it1); 
int elements = it2 - it1;