當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ Algorithm 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

讓我們看另一個簡單的例子,將向量的奇數位交換到數組的奇數位:

#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 iter_swap()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。