C++教程
C++控制语句
C++函数
C++数组
C++指针
C++对象
C++继承
C++多态
C++抽象
C++常用
C++ STL教程
C++迭代器
C++程序

C++ iter_swap()

C++ 算法iter_swap()

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

让我们看另一个简单的示例,将 Vector 的奇数位交换为奇数步长的数组:
#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()算法交换由两个不同的迭代器指向的整数值,这些迭代器可能指向相同的整数 Vector ,或者指向两个不同的整数 Vector 。

示例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  }

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4