C++中的iter_swap函數的應用

原文地址:http://blog.sina.com.cn/s/blog_6d79d83a0100wg6g.html

前面一篇博文講到這樣的一個例子:

swap函數有一個缺點,就是無法交換2個迭代器的值,我一開始想要交換一個string中的兩個字符,我是這麼寫的:
交換pos1和pos2兩個位置的值。
string str;
int pos1,pos2;
cin>>str>>pos1>>pos2;
swap(str.begin()+pos1,str.begin()+pos2);
但是CE了,說明swap函數不能交換iterator,不過後面我會介紹函數iter_swap。

正文:
如果使用iter_swap函數,那麼就可以進行交換了,先看一下函數的參數:
iter_swap(a,b);//a爲一個迭代器,b爲另一個迭代器。
顧名思義,iter_swap的功能就是交換兩個迭代器的元素。

再看一下前面的那個例子,我們要調用iter_swap函數來交換兩個string中的兩個字符,我們應該這麼寫:
string str;
int pos1,pos2;
cin>>str>>pos1>>pos2;
iter_swap(str.begin()+pos1,str.begin()+pos2);
這樣就成功的交換了2個元素。

我們還可以交換兩個不同容器中的元素,例如:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main()
{
    string str;
    vector <char> V;
    cin>>str;
    V.resize(str.length());
    copy(str.begin(),str.end(),V.begin());
    cout<<"first string : "<<str<<endl;
   
    cout<<"second vector char: ";
    for(vector <char> ::iterator iter=V.begin();iter!=V.end();iter++)
        cout<<*iter;
    cout<<endl;
   
    int pos1,pos2;
    cin>>pos1>>pos2;
    iter_swap(str.begin()+pos1,V.begin()+pos2);
   
    cout<<"first string : "<<str<<endl;
    cout<<"second vector char: ";
    for(vector <char> ::iterator iter=V.begin();iter!=V.end();iter++) cout<<*iter;
    cout<<endl;
    return 0;
}
輸入:
abc
0 1
輸出:
first string : abc
second vector char : abc
first string : bbc
second vector char : aac
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章