C++/List/list iterator
Содержание
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
*/
Traverse a List Using an Iterator
#include <iostream>
#include <list>
using namespace std;
typedef list<int> IntegerList;
int main()
{
IntegerList intList;
for (int i = 1; i <= 10; ++i)
intList.push_back(i * 2);
for (IntegerList::const_iterator ci = intList.begin(); ci != intList.end(); ++ci)
cout << *ci << " ";
return 0;
}
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
*/