2014-05-03 14 views
6

Czy istnieje C++ analogowo idiom Pythona:Czy istnieje odpowiednik C++/C++ 11 dla iteracji python nad indeksem i wartością "dla i, v w enumerate (listVar):"?

for i, v in enumerate(listVar): 

tj Chcę iteracyjne z dostępem zarówno do indeksu a wartością pojemnika mam iteracji skończona.

+1

Czy masz na myśli s.th. jak 'dla (auto it: enumerate())' –

+0

AFAIK nie ma żadnej funkcji językowej, aby to zrobić, i nie ma nic w standardowej bibliotece, którą możesz użyć trywialnie. Musiałbyś coś zaimplementować lub użyć brzydkiej zmiennej licznika zewnętrznego. – juanchopanza

+0

@juanchopanza: A co z zmienną iteracyjną, która zwraca krotkę? –

Odpowiedz

3

Możesz to zrobić w następujący sposób. Załóżmy, że pojemnik jest std::vector<int> v

Następnie można napisać coś jak

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

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

Na przykład

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

Jednak istnieje problem, że iterator powinien być przypadkowy iterator dostępu. W przeciwnym razie nie możesz użyć operatora indeksu dolnego.

+1

Pokaż je za pomocą 'wyliczenia () '... –

+1

@ πάντα ῥεῖ Nie znam ani pythona, ani wyliczenia() :) –

+0

Również jeśli masz' kontynuuj', będziesz musiał dodać '++ i' w każdym' kontynuuj', co jest denerwujące – Claudiu

Powiązane problemy