На этом шаге мы рассмотрим функцию перестановки элементов.
Простая вспомогательная функция iter_swap() меняет местами элементы, на которые ссылаются два итератора:
#include <algorithm> void iter_swap (ForwardIterator pos1, ForwardIterator pos2)
Меняет местами элементы, на которые ссылаются итераторы pos1 и pos2. Итераторы не обязаны относиться к одному типу. Тем не менее значения должны быть совместимы по присваиванию.
Простой пример использования функции iter_swap():
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <iterator> #include <list> #include <algorithm> #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } template <class T> inline void PRINT_ELEMENTS (const T& coll, const char* optcstr="") { typename T::const_iterator pos; std::cout << ToRus(optcstr); for (pos=coll.begin(); pos!=coll.end(); ++pos) { std::cout <<*pos <<' '; } std::cout << std::endl; } int main(int argc, char* argv[]) { list<int> coll; // Вставка элементов от 1 до 9 for (int i=1; i<=9; ++i) { coll.push_back(i); } PRINT_ELEMENTS(coll,"Исходный список:\n"); // Перестановка первого и второго значений iter_swap (coll.begin(),++coll.begin()); PRINT_ELEMENTS(coll,"Список после перестановки первого и второго элемента:\n"); // Перестановка первого и последнего значений iter_swap (coll.begin(), --coll.end()); PRINT_ELEMENTS(coll,"Список после перестановки первого и последнего элемента:\n"); getch(); return 0; } //---------------------------------------------------------------------------
Результат выполнения программы выглядит так:
Рис.1. Результат работы приложения
Учтите, что с векторами эта программа обычно не работает. Дело в том, что операции ++coll.begin() и --coll.end() выполняются с временными указателями (дополнительная информация на эту тему приведена на 215 шаге).
Со следующего шага мы начнем знакомиться с итераторными адаптерами.