2014-05-03 3 views
6

C'è un analogo C++ per il linguaggio python:Esiste un analogo di C++/C++ 11 per l'iterazione di Python su indice e valore "per i, v in enumerate (listVar):"?

for i, v in enumerate(listVar): 

cioè voglio iterare con accesso sia l'indice e il valore del contenitore che sto iterare su.

+1

Vuoi dire s.th. come 'for (auto it: enumerate())' –

+0

AFAIK non ci sono funzionalità linguistiche per fare questo, e non c'è nulla nella libreria standard che si possa usare banalmente. Dovresti implementare qualcosa o usare una brutta variabile del contatore dell'oscilloscopio esterno. – juanchopanza

+0

@juanchopanza: che dire di una variabile di iterazione che restituisce una tupla? –

risposta

3

Puoi farlo nel seguente modo. Lasciate che si supponga che il contenitore è std::vector<int> v

Poi si può scrivere qualcosa come

std::vector<int>::size_type i = 0; 

for (int x : v) 
{ 
    // using x; 
    // using v[i]; 
    ++i; 
} 

Per esempio

#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 

    std::vector<int>::size_type i = 0; 
    for (int x : v) 
    { 
     std::cout << x << " is " << v[i] << std::endl; 
     ++i; 
    } 
} 

Tuttavia c'è un problema che l'iteratore deve essere un iteratore ad accesso casuale. Altrimenti non è possibile utilizzare l'operatore di pedice.

+1

Mostrale con 'enumerate () '... –

+1

@ πάντα ῥεῖ Non conosco né python né enumerate() :) –

+0

Anche se hai' continue's, dovrai aggiungere '++ i' in ogni' continue', che è fastidioso – Claudiu