2015-01-20 14 views
6

Ich möchte, dass der Vektoriterator auf ein Vektorelement zeigt. Ich habeVektoradresse dem Iterator zuweisen

#include <iostream> 
#include <vector> 

int main() { 
    std::vector<int> vec = {1,2,3,4,5}; 
    std::vector<int>::iterator it; 

    // want "it" to point to the "3" element, so something like 
    // it = &prices[2]; 
    // it = &prices.at(2); 

} 

aber keiner dieser Versuche funktioniert. Ich glaube, ich brauche etwas Vektorfunktion, die einen Iterator zurückgibt, statt einer Adresse

+2

'it = vec.begin() + 2;' – Borgleader

+1

Oder 'it = std :: next (vec.begin(), 2);' Oder die kanonische Antwort - RTFM :-) – Praetorian

Antwort

13

keiner dieser Versuche arbeiten

der Tat kann man nicht einen Container iter erstellen von einem Zeiger auf ein Containerelement. Sie können sie nur aus dem Container selbst erhalten.

Ich glaube, ich brauche etwas Funktion Vektor, der einen Iterator

Ja zurückgibt, begin() gibt einen Iterator auf das erste Element. Inkrementieren, um auf das gewünschte Element zu verweisen. Für das dritte,

it = vec.begin() + 2; 

oder, allgemeiner,

it = std::next(std::begin(container), 2); 

, die selbst dann, wenn der Behälter nicht Random-Access funktioniert.

+0

Bemerkenswert, dass 'Std :: next' ist nur in C++ 11 verfügbar, davor 'it = container.begin(); std :: advance (it, 2); 'macht das gleiche - wenn auch nur peinlicher. – Barry

6

Der wichtigste Weg, einen Iterator zu bekommen, ist eine der verwenden (?):

std::vector<int>::begin() 
std::vector<int>::end() 
std::vector<int>::rbegin() 
std::vector<int>::rend() 

In Ihrem Fall:

std::vector<int> vec = {1,2,3,4,5}; 
std::vector<int>::iterator it = std::next(vec.begin(), 2);