124 votes

Comment naviguer dans un vecteur à l'aide d'itérateurs ? (C++)

Le but est d'accéder au "nième" élément d'un vecteur de chaînes au lieu de l'opérateur [] ou de la méthode "at". D'après ce que je comprends, les itérateurs peuvent être utilisés pour naviguer dans les conteneurs, mais je n'ai jamais utilisé d'itérateurs auparavant, et ce que je lis est déroutant.

Si quelqu'un pouvait me donner des informations sur la façon d'y parvenir, je vous en serais reconnaissant. Merci.

122voto

codaddict Points 154968

Vous devez utiliser la méthode begin end de la classe vector, qui renvoie l'itérateur se référant respectivement au premier et au dernier élément.

using namespace std;  

vector<string> myvector;  // a vector of stings.


// push some strings in the vector.
myvector.push_back("a");
myvector.push_back("b");
myvector.push_back("c");
myvector.push_back("d");


vector<string>::iterator it;  // declare an iterator to a vector of strings
int n = 3;  // nth element to be found.
int i = 0;  // counter.

// now start at from the beginning
// and keep iterating over the element till you find
// nth element...or reach the end of vector.
for(it = myvector.begin(); it != myvector.end(); it++,i++ )    {
    // found nth element..print and break.
    if(i == n) {
        cout<< *it << endl;  // prints d.
        break;
    }
}

// other easier ways of doing the same.
// using operator[]
cout<<myvector[n]<<endl;  // prints d.

// using the at method
cout << myvector.at(n) << endl;  // prints d.

75voto

ahmad Points 1679

En C++-11, vous pouvez faire :

std::vector<int> v = {0, 1, 2, 3, 4, 5};
for (auto i : v)
{
   // access by value, the type of i is int
   std::cout << i << ' ';
}
std::cout << '\n';

Voir ici pour les variations : https://en.cppreference.com/w/cpp/language/range-for

0voto

hmofrad Points 871

Voici un exemple d'accès ith d'un %-% std::vector l'aide d'un std::iterator au sein d'une boucle qui ne nécessite pas d'incrémentation de deux itérateurs.

std::vector<std::string> strs = {"sigma" "alpha", "beta", "rho", "nova"};
int nth = 2;
std::vector<std::string>::iterator it;
for(it = strs.begin(); it != strs.end(); it++) {
    int ith = it - strs.begin();
    if(ith == nth) {
        printf("Iterator within  a for-loop: strs[%d] = %s\n", ith, (*it).c_str());
    }
}

Sans pour-boucle

it = strs.begin() + nth;
printf("Iterator without a for-loop: strs[%d] = %s\n", nth, (*it).c_str());

et en utilisant la méthode at :

printf("Using at position: strs[%d] = %s\n", nth, strs.at(nth).c_str());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X