函數原型:
- template<class ForwardIterator1, class ForwardIterator2>
- void iter_swap(
- ForwardIterator1 _Left,
- ForwardIterator2 _Right
- );
_Left,_Right指向要交換的兩個迭代器
程序示例:
在泛型編程裏面,iterator被稱爲“泛型指針”,因此我們可以通過iterator作爲指針來交換兩個數組的元素,爲了展示swap和iter_swap的區別,在下面這個示例中,我們分別通過這兩個算法來實現數組元素的簡單交換。
- /*******************************************************************
- * Copyright (C) Jerry Jiang
- *
- * File Name : iter_swap.cpp
- * Author : Jerry Jiang
- * Create Time : 2012-3-26 23:22:18
- * Mail : [email protected]
- * Blog : http://blog.csdn.net/jerryjbiao
- *
- * Description : 簡單的程序詮釋C++ STL算法系列之十六
- * 變易算法 : 迭代器交換iter_swap
- *
- ******************************************************************/
- #include <iostream>
- #include <algorithm>
- #include <iterator>
- using namespace std;
- int main()
- {
- //初始化數組
- int b[ 9 ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- ostream_iterator< int > otpt( cout, " " );
- //通過copy+ostream_iterator的方式輸出原始數組
- cout << "Array a contains:\n ";
- copy( b, b + 9, otpt );
- //調用iter_swap交換b[0]和b[1]
- iter_swap( &b[0], &b[1] );
- //調用swap交換b[2]和b[3],展示兩者的區別
- swap( b[2], b[3] );
- //通過copy+ostream_iterator的方式輸出交換後的數組
- cout << "\n Array a after swapping :\n ";
- copy( b, b + 9, otpt );
- cout << endl;
- return 0;
- }
上例中,迭代器是作爲泛型指針的形式來實現數組元素的交換,現在我們通過iter_swap算法來實現同一種容器之間元素的交換以及不同容器之間的元算交換。
- /*******************************************************************
- * Copyright (C) Jerry Jiang
- *
- * File Name : iter_swap02.cpp
- * Author : Jerry Jiang
- * Create Time : 2012-3-26 23:58:29
- * Mail : [email protected]
- * Blog : http://blog.csdn.net/jerryjbiao
- *
- * Description : 簡單的程序詮釋C++ STL算法系列之十六
- * 變易算法 : 迭代器交換iter_swap
- *
- ******************************************************************/
- #include <vector>
- #include <deque>
- #include <algorithm>
- #include <iostream>
- #include <ostream>
- using namespace std;
- int main( )
- {
- deque<int> deq1;
- deque<int>::iterator d1_Iter;
- ostream_iterator< int > otpt( cout, " " );
- deq1.push_back ( 2 );
- deq1.push_back ( 4 );
- deq1.push_back ( 9 );
- //通過copy輸出隊列初始序列
- cout << "The deque is:\n";
- copy(deq1.begin(), deq1.end(), otpt);
- //通過iter_swap算法交換隊列中第一個和最後一個元素
- iter_swap(deq1.begin() , --deq1.end());
- //輸出通過iter_swap交換後的隊列
- cout << "\n\nThe deque of CInts with first & last elements swapped is:\n ";
- copy(deq1.begin(), deq1.end(), otpt);
- //通過swap交換算法還原隊列中的元素
- swap (*deq1.begin(), *(deq1.end()-1));
- cout << "\n\nThe deque of CInts with first & last elements swapped back is:\n ";
- copy(deq1.begin(), deq1.end(), otpt);
- cout << endl;
- cout << "*********************************" << endl;
- // 通過iter_swap交換vector和deque兩個不同容器中的元素
- vector <int> v1;
- deque <int> deq2;
- //初始化容器v1
- for ( size_t i = 0 ; i <= 3 ; ++i )
- {
- v1.push_back( i );
- }
- //初始化隊列deq2
- for ( size_t ii = 4 ; ii <= 5 ; ++ii )
- {
- deq2.push_back( ii );
- }
- cout << "\nVector v1 is : " ;
- copy(v1.begin(), v1.end(), otpt);
- cout << "\nDeque deq2 is : " ;
- copy(deq2.begin(), deq2.end(), otpt);
- cout << endl;
- //交換容器v1和隊列deq2的第一個元素
- iter_swap( v1.begin(), deq2.begin() );
- cout << "\n\nAfter exchanging first elements,\n vector v1 is: " ;
- copy(v1.begin(), v1.end(), otpt);
- cout << " \n deque deq2 is: ";
- copy(deq2.begin(), deq2.end(), otpt);
- cout << endl;
- return 0;
- }
*******************************************************************************************************************************
C++經典書目索引及資源下載:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************