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


C++ std::iter_swap用法及代碼示例

std::swap用於在兩個容器之間交換元素。 std::iter_swap促進了完成此操作的另一種方法,顧名思義,該方法用於在迭代器的幫助下交換元素。

它隻是交換迭代器指向的元素的值。如果看一下它的內部工作,我們會發現該函數本身使用std::swap(。

用法:


void iter_swap (ForwardIterator1 a, ForwardIterator2 b);

Here, a and b are forward iterators.

返回: It has a void return type, so it does not 
return any value.

// C++ program to demonstrate the use of std::iter_swap 
#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的結尾。

std::iter_swap與std::swap

在知道iter_swap用於交換值之後,就像std::swap(),現在出現的問題是,如果我們已經有了swap(),為什麽我們應該學習iter_swap。支持iter_swap的一些原因是:

  • 基於節點的序列的優化:大多數STL算法在迭代器範圍上運行。因此,在交換那些範圍內的元素,交換由兩個迭代器指向的元素時,使用iter_swap是有意義的。這允許對基於節點的序列(例如std::list)進行優化,從而僅重新鏈接節點,而不是實際交換數據。
  • 在STL定義中使用:一些stl::reverse之類的STL算法在其定義中涉及使用std::iter_swap。因此,為了理解這些定義,應該對此有所了解。
    // Definition of std::reverse() 
    template void reverse(BidirectionalIterator first,  
                           BidirectionalIterator last) 
    { 
        while ((first != last) && (first != --last))  
        { 
            std::iter_swap(first, last); 
            ++first; 
        } 
    }
  • 提供抽象:iter_swap有用地封裝了可交換接口的一部分,否則您每次都會實現該部分。


相關用法


注:本文由純淨天空篩選整理自 std::iter_swap in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。