C++中的iter_swap函数的应用

来源:互联网 发布:盗墓笔记坐骑进阶数据 编辑:程序博客网 时间:2024/06/08 00:03

原文地址: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
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 开车给豪车撞了怎么办 喝酒开车撞伤人怎么办 被车撞伤了怎么办 开车撞人骨折了怎么办 开车撞人后住院怎么办 骑车撞到小孩怎么办 开庭不通知家属怎么办 撞人后对方起诉怎么办 驾驶证被别人盗用怎么办 驾照分数扣完了怎么办 驾照分被盗扣怎么办 驾驶证分数不够扣怎么办 驾驶证分数扣完了怎么办 驾驶证分被骗了怎么办 自驾游穷游睡车上洗衣服怎么办 考生密码忘了怎么办 中国公民在菲律宾遇害怎么办 鞋有胶皮味怎么办 pvc下水管渗漏水怎么办 5s主板漏电怎么办 飞机转机延误了怎么办 家里有小丑雕像怎么办 巴黎被抢了怎么办 博彩公司压护照怎么办 跑马拉松手机怎么办 高跟鞋绒面掉皮怎么办 白裤子透短裤怎么办 崖柏珠子脏了怎么办 唱歌总是气息不足怎么办 幻影wifi闪退怎么办 镇魔曲转职后装备怎么办 起诉离婚对方不同意怎么办 后宫无人岛掉血了怎么办 老公不同意离婚该怎么办 爸妈闹离婚我该怎么办 爸妈闹离婚了我怎么办 苹果迅雷链接打不开怎么办 眼睛有灼烧感怎么办 爸妈关系不好怎么办 眼睛下面辣到了怎么办 老公隐瞒妻子欠下巨债怎么办