📜  C++ STL-algorithm.iter_swap()函数

📅  最后修改于: 2020-10-16 14:12:47             🧑  作者: Mango

C++ STL algorithmiter_swap()

C++ STL algorithm.iter_swap()交换两个迭代器a和b指向的元素。

句法

template 
  void iter_swap (ForwardIterator1 a, ForwardIterator2 b);

参数

a:要交换其值的正向迭代器之一。

b:要交换其值的正向迭代器的第二个。

返回值

没有

复杂度

不变

数据竞争

两个迭代器指向的对象均已更改。

异常安全

如果swap()函数具有异常,则引发异常。

请注意,无效的参数会导致未定义的行为。

例子1

让我们看一个简单的示例来演示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, 

例子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的结尾。

例子3

让我们看另一个简单的示例,将向量的奇数位交换为奇数步长的数组:

#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  

例子4

让我们看另一个简单的例子:

#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()算法交换由两个不同的迭代器指向的整数值,这些迭代器可能指向同一整数矢量,或者指向两个不同的整数矢量。

例子5

让我们看另一个示例来说明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  }