C++算法 iter_swap()交换两个迭代器a和b指向的元素。
template <class ForwardIterator1, class ForwardIterator2> void iter_swap (ForwardIterator1 a, ForwardIterator2 b);
a :要交换其值的正向迭代器之一。
b :要交换其值的正向迭代器的第二个。
没有
让我们看一个简单的示例来演示iter_swap()的用法:
#include <algorithm> #include <iostream> #include <vector> #include <iterator> using namespace std; int main() { vector<int> v1 = { 1, 2, 3 }; vector<int> v2 = { 4, 5, 6 }; iter_swap(v1.begin()+1, v2.begin()+2); cout << "v1: "; copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, ", ")); cout << endl; cout << "v2: "; copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, ", ")); cout << endl; return 0; }
输出:
v1: 1, 6, 3, v2: 4, 5, 2,
让我们看另一个简单的例子:
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { //Declaring first vector vector<int> v1; int i; for (i = 0; i < 10; ++i) { v1.push_back(i); } //v1 contains 0 1 2 3 4 5 6 7 8 9 vector<int>::iterator i1, i2; i1 = v1.begin(); i2 = v1.end() - 1; //Performing swap between first and last element //of vector std::iter_swap(i1, i2); //Displaying v1 after swapping for (i = 0; i < 10; ++i) { cout << v1[i] << " "; } return 0; }
输出:
9 1 2 3 4 5 6 7 8 0
在上面的示例中,我们在两个迭代器的帮助下交换了v1中的元素,其中一个指向v1的开头,另一个指向v1的结尾。
链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-algorithm-iter-swap-function.html
来源:LearnFk无涯教程网
让我们看另一个简单的示例,将向量的奇数位交换为奇数步长的数组:
#include <iostream> #include <vector> #include <algorithm> using namespace std; void print(int v) { cout << v << " "; } int main() { int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; vector <int> v(10); cout << "Vector : "; for_each(v.begin(), v.end(), print); cout << endl; cout << "Array : "; for_each(a, a + 10, print); cout << endl; for (int i = 1; i < 10; i+=2) iter_swap(v.begin() + i, a + i); cout << "\nSwapping odd places of vector with odd places of array"<< endl<<endl; cout << "Vector : "; for_each(v.begin(), v.end(), print); cout << endl; cout << "Array : "; for_each(a, a + 10, print); cout << endl; return 0; }
输出:
Vector : 0 0 0 0 0 0 0 0 0 0 Array : 1 2 3 4 5 6 7 8 9 10 Swapping odd places of vector with odd places of array Vector : 0 2 0 4 0 6 0 8 0 10 Array : 1 0 3 0 5 0 7 0 9 0
让我们看另一个简单的例子:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int a1[] = {1, 2, 3, 4, 5}; vector<int> v1(a1, a1+5); cout <<"Here are the contents of v1:\n"; for (vector<int>::size_type i=0; i<v1.size(); i++) cout <<v1.at(i)<<" "; int a2[] = {2, 4, 6, 8, 10}; vector<int> v2(a2, a2+5); cout <<"\nHere are the contents of v2:\n"; for (vector<int>::size_type i=0; i<v2.size(); i++) cout <<v2.at(i)<<" "; cout <<"\n\nFirst we swap the end values in v1."; iter_swap(v1.begin(), v1.end()-1); cout <<"\nHere are the contents of the revised v1:\n"; for (vector<int>::size_type i=0; i<v1.size(); i++) cout <<v1.at(i)<<" "; cout <<"\n\nThen we swap the middle values in v1 and v2."; iter_swap(v1.begin()+2, v2.begin()+2); cout <<"\nHere are the contents of the revised v1:\n"; for (vector<int>::size_type i=0; i<v1.size(); i++) cout <<v1.at(i)<<" "; cout <<"\nHere are the contents of the revised v2:\n"; for (vector<int>::size_type i=0; i<v2.size(); i++) cout <<v2.at(i)<<" "; return 0; }
输出:
Here are the contents of v1: 1 2 3 4 5 Here are the contents of v2: 2 4 6 8 10 First we swap the end values in v1. Here are the contents of the revised v1: 5 2 3 4 1 Then we swap the middle values in v1 and v2. Here are the contents of the revised v1: 5 2 6 4 1 Here are the contents of the revised v2: 2 4 3 8 10
上面的示例说明了使用iter_swap()算法交换由两个不同的迭代器指向的整数值,这些迭代器可能指向同一整数矢量,或者指向两个不同的整数矢量。
让我们看另一个示例来说明iter_swap()的用法:
#include <iostream> #include <vector> #include <algorithm> using namespace std; // return the next Fibonacci number in the // Fibonacci series. int Fibonacci(void) { static int r; static int f1 = 0; static int f2 = 1; r = f1 + f2 ; f1 = f2 ; f2 = r ; return f1 ; } int main() { const int VECTOR_SIZE = 8 ; //Define a template class vector of integers typedef vector<int > IntVector ; //Define an iterator for template class vector of integer typedef IntVector::iterator IntVectorIt ; IntVector Numbers(VECTOR_SIZE) ; //vector containing numbers IntVectorIt start, end, it ; start = Numbers.begin() ; //location of first //element of Numbers end = Numbers.end() ; //one past the location //last element of Numbers //fill the range [first, last +1) with a series of //Fibonacci numbers using the Fibonacci function generate(start, end, Fibonacci) ; cout << "Before calling iter_swap" << endl ; //print content of Numbers cout << "Numbers { " ; for(it = start; it != end; it++) cout << *it << " " ; cout << " }\n" << endl ; //swap the first and last elements of the //sequence using iter_swap iter_swap(start, end - 1) ; cout << "After calling iter_swap" << endl ; //print content of Numbers cout << "Numbers { " ; for(it = start; it != end; it++) cout << *it << " " ; cout << " }\n" << endl ; return 0; }
输出:
Before calling iter_swap Numbers { 1 1 2 3 5 8 13 21 } After calling iter_swap Numbers { 21 1 2 3 5 8 13 1 }
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)