📅  最后修改于: 2020-10-16 14:12:47             🧑  作者: Mango
C++ STL algorithm.iter_swap()交换两个迭代器a和b指向的元素。
template
void iter_swap (ForwardIterator1 a, ForwardIterator2 b);
a:要交换其值的正向迭代器之一。
b:要交换其值的正向迭代器的第二个。
没有
不变
两个迭代器指向的对象均已更改。
如果swap()函数具有异常,则引发异常。
请注意,无效的参数会导致未定义的行为。
让我们看一个简单的示例来演示iter_swap()的用法:
#include
#include
#include
#include
using namespace std;
int main() {
vector v1 = { 1, 2, 3 };
vector v2 = { 4, 5, 6 };
iter_swap(v1.begin()+1, v2.begin()+2);
cout << "v1: ";
copy(v1.begin(), v1.end(), ostream_iterator(cout, ", "));
cout << endl;
cout << "v2: ";
copy(v2.begin(), v2.end(), ostream_iterator(cout, ", "));
cout << endl;
return 0;
}
输出:
v1: 1, 6, 3,
v2: 4, 5, 2,
让我们看另一个简单的例子:
#include
#include
#include
using namespace std;
int main()
{
// Declaring first vector
vector 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::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的结尾。
让我们看另一个简单的示例,将向量的奇数位交换为奇数步长的数组:
#include
#include
#include
using namespace std;
void print(int v)
{
cout << v << " ";
}
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
vector 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<
输出:
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
#include
#include
using namespace std;
int main()
{
int a1[] = {1, 2, 3, 4, 5};
vector v1(a1, a1+5);
cout <<"Here are the contents of v1:\n";
for (vector::size_type i=0; i v2(a2, a2+5);
cout <<"\nHere are the contents of v2:\n";
for (vector::size_type i=0; i::size_type i=0; i::size_type i=0; i::size_type i=0; i
输出:
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
#include
#include
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 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 }