C++ Tutorial/list/list iterator

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

iterator of list integers

#include <iostream>
#include <list>
using namespace std;
   
int main()
{
  list<int> lst;
  int i;
   
  for(i=0; i<10; i++) lst.push_back(i);
   
  cout << "Size = " << lst.size() << endl;
   
  list<int>::iterator p = lst.begin();
  while(p != lst.end()) {
    cout << *p << endl;
    p++;
  }
   
  p = lst.begin();
  while(p != lst.end()) {
    *p = *p + 100;
    p++;
  }
   
  p = lst.begin();
  while(p != lst.end()) {
    cout << *p << " ";
    p++;
  }
   
  return 0;
}

List iterator for certain type list

#include <iostream>
#include <list>
using namespace std;
typedef list<int> LISTINT;
int main(void)
 {
   LISTINT listOne;
   LISTINT::iterator i;
   listOne.push_front (2);
   listOne.push_front (1);
   listOne.push_back (3);
   for (i = listOne.begin(); i != listOne.end(); ++i)
     cout << *i << " ";
   cout << endl;
   for (i = listOne.end(); i != listOne.begin(); --i)
     cout << *i << " ";
   cout << endl;
 }

Loop through list back and forth

/* 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.
 */
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
void print (int elem)
{
    cout << elem << " ";
}
int main()
{
    list<int> coll;
    // insert elements from 1 to 9
    for (int i=1; i<=9; ++i) {
        coll.push_back(i);
    }
    // print all elements in normal order
    for_each (coll.begin(), coll.end(),      // range
              print);                        // operation
    cout << endl;
    // print all elements in reverse order
    for_each (coll.rbegin(), coll.rend(),    // range
              print);                        // operations
    cout << endl;
}
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1

Move list iterator using ++

#include <iostream>
#include <cassert>
#include <list>
#include <algorithm> // for find
using namespace std;
int main()
{
  char x[5] = {"a", "r", "e", "q", "t"};
  list<char> list1(&x[0], &x[5]);
  // Search for the first occurrence of the letter e:
  list<char>::iterator where = find(list1.begin(), list1.end(), "e");
  list<char>::iterator next = where;
  ++next;
  cout << *next << endl;
  return 0;
}
q

Use iterator to change all elements in a list

#include <iostream>
#include <list>
using namespace std;
int main()
{
  list<int> lst; // create an empty list
  int i;
  for(i=0; i<10; i++) lst.push_back(i);
  cout << "Size = " << lst.size() << endl;
  cout << "Contents: ";
  list<int>::iterator p = lst.begin();
  while(p != lst.end()) {
    cout << *p << " ";
    p++;
  }
  cout << "\n\n";
  // change contents of list
  p = lst.begin();
  while(p != lst.end()) {
    *p = *p + 100;
    p++;
  }
  cout << "Contents modified: ";
  p = lst.begin();
  while(p != lst.end()) {
    cout << *p << " ";
    p++;
  }
  return 0;
}
Size = 10
Contents: 0 1 2 3 4 5 6 7 8 9
Contents modified: 100 101 102 103 104 105 106 107 108 109

Use iterator to loop through all elements in a list

#include <iostream>
#include <list>
using namespace std;
int main()
{
  list<int> lst; // create an empty list
  int i;
  for(i=0; i<10; i++) lst.push_back(i);
  cout << "Size = " << lst.size() << endl;
  cout << "Contents: ";
  list<int>::iterator p = lst.begin();
  while(p != lst.end()) {
    cout << *p << " ";
    p++;
  }
  cout << "\n\n";
  return 0;
}
Size = 10
Contents: 0 1 2 3 4 5 6 7 8 9

Use reverse_iterator and iterator with list

/* 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.
 */
#include <iostream>
#include <list>
#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);
    }
    // find position of element with value 5
    list<int>::iterator pos;
    pos = find (coll.begin(), coll.end(),    // range
                5);                          // value
    // print value of the element
    cout << "pos:   " << *pos << endl;
    // convert iterator to reverse iterator
    list<int>::reverse_iterator rpos(pos);
    // print value of the element to which the reverse iterator refers
    cout << "rpos:  " << *rpos << endl;
    // convert reverse iterator back to normal iterator
    list<int>::iterator rrpos;
    rrpos = rpos.base();
    // print value of the element to which the normal iterator refers
    cout << "rrpos: " << *rrpos << endl;
}
pos:   5
rpos:  4
rrpos: 5