C++ Tutorial/STL Algorithms Iterator/iterator

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Advance the iterator

<source lang="cpp">/* The following code example is taken from the book

* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>
  2. include <list>
  3. include <algorithm>

using namespace std; int main() {

   list<int> coll;
   // insert elements from 1 to 9
   for (int i=1; i<=9; ++i) {
       coll.push_back(i);
   }
   list<int>::iterator pos = coll.begin();
   // print actual element
   cout << *pos << endl;
   // step three elements forward
   advance (pos, 3);
   // print actual element
   cout << *pos << endl;
   // step one element backward
   advance (pos, -1);
   // print actual element
   cout << *pos << endl;

}</source>

1
4
3

Convert iterator to reverse iterator

<source lang="cpp">/* The following code example is taken from the book

* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>
  2. include <vector>
  3. include <algorithm>

using namespace std; int main() {

   vector<int> coll;
   // insert elements from 1 to 9
   for (int i=1; i<=9; ++i) {
       coll.push_back(i);
   }
   // find position of element with value 5
   vector<int>::iterator pos;
   pos = find (coll.begin(), coll.end(),
               5);
   // print value to which iterator pos refers
   cout << "pos:  " << *pos << endl;
   // convert iterator to reverse iterator rpos
   vector<int>::reverse_iterator rpos(pos);
   // print value to which reverse iterator rpos refers
   cout << "rpos: " << *rpos << endl;

}</source>

pos:  5
rpos: 4

Find a value in map by key

<source lang="cpp">#include <iostream>

  1. include <map>

using namespace std; int main() {

 map<char, int> m;
 // put pairs into map
 for(int i=0; i<26; i++) {
   m.insert(pair<char, int>("A"+i, 65+i));
 }
 char ch = "G";
 map<char, int>::iterator p;
 
 // find value given key
 p = m.find(ch);
 if(p != m.end()) 
   cout << "Its ASCII value is  " << p->second;
 else
   cout << "Key not in map.\n";
 return 0;

}</source>

Its ASCII value is  71

iterator template

<source lang="cpp">#include <vector>

  1. include <iterator>
  2. include <iostream>

using std::vector; using std::cout; using std::endl; template <typename IteratorType> void iteratorTraitsTest(IteratorType it) {

 typename std::iterator_traits<IteratorType>::value_type temp;
 temp = *it;
 cout << temp << endl;

} int main(int argc, char** argv) {

 vector<int> v;
 v.push_back(5);
 iteratorTraitsTest(v.begin());
 return (0);

}</source>