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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章