2015-01-20 10 views
6

Mi piacerebbe che l'iteratore vettoriale indicasse un elemento vettoriale. HoAssegna indirizzo vettoriale a iteratore

#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); 

} 

ma nessuno di questi tentativi funziona. Credo che ho bisogno di qualche funzione vettoriale che restituisce un iteratore, invece di un indirizzo

+2

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

+1

Oppure 'it = std :: next (vec.begin(), 2);' Oppure la risposta canonica - RTFM :-) – Praetorian

risposta

13

nessuno di questi tentativi funzionano

Infatti, non è possibile creare un iter container ator da un puntatore a un elemento contenitore. Puoi ottenerli solo dal contenitore stesso.

Credo che ho bisogno di qualche funzione vettoriale che restituisce un iteratore

Sì, begin() restituisce un iteratore al primo elemento. Incrementa che fare riferimento a qualsiasi elemento tu voglia. Per il terzo,

it = vec.begin() + 2; 

o, più in generale,

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

che funziona anche se il contenitore non è ad accesso casuale.

+0

Vale la pena notare che 'std :: next' è disponibile solo in C++ 11, prima di 'it = container.begin(); std :: advance (it, 2); 'fa la stessa cosa - se solo più imbarazzante. – Barry

6

Il modo principale per ottenere un iteratore è quello di utilizzare uno dei (?):

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

Nel tuo caso:

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