C++ 算法 iter_swap() 交换两个迭代器 a 和 b 指向的元素。
用法
template <class ForwardIterator1, class ForwardIterator2>
void iter_swap (ForwardIterator1 a, ForwardIterator2 b);
参数
a: 要交换其值的前向迭代器之一。
b:要交换值的前向迭代器的第二个。
返回值
空
复杂度
持续的
数据竞争
两个迭代器指向的对象都发生了变化。
异常安全
如果 swap() 函数有异常,则抛出异常。
请注意,无效参数会导致未定义的行为。
例子1
让我们看一个简单的例子来演示 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,
例子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 的结尾。
例子3
让我们看另一个简单的例子,将向量的奇数位交换到数组的奇数位:
#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
示例 4
让我们看另一个简单的例子:
#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() 算法来交换由两个不同迭代器指向的整数值,这些迭代器可能指向同一个整数向量,或两个不同的整数向量。
例 5
我们再看一个例子来说明 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 }
相关用法
- C++ Algorithm is_sorted()用法及代码示例
- C++ Algorithm inplace_merge()用法及代码示例
- C++ Algorithm is_partitioned()用法及代码示例
- C++ Algorithm includes()用法及代码示例
- C++ Algorithm is_heap()用法及代码示例
- C++ Algorithm is_sorted_until()用法及代码示例
- C++ Algorithm is_heap_until()用法及代码示例
- C++ Algorithm remove_if()用法及代码示例
- C++ Algorithm remove()用法及代码示例
- C++ Algorithm max_element()用法及代码示例
- C++ Algorithm set_union()用法及代码示例
- C++ Algorithm next_permutation()用法及代码示例
- C++ Algorithm upper_bound()用法及代码示例
- C++ Algorithm minmax()用法及代码示例
- C++ Algorithm remove_copy_if()用法及代码示例
- C++ Algorithm random_shuffle()用法及代码示例
- C++ Algorithm pop_heap()用法及代码示例
- C++ Algorithm replace()用法及代码示例
- C++ Algorithm set_intersection()用法及代码示例
- C++ Algorithm lower_bound()用法及代码示例
注:本文由纯净天空筛选整理自 C++ Algorithm iter_swap()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。