C++ STL(8):元素交换

29 篇文章 0 订阅
29 篇文章 1 订阅
#include <iostream>
#include <algorithm>
#include <vector>

//交换元素
int main()
{
	/************************************************************************/
	//swap
	/************************************************************************/
	//交换两数
	/*
		template<class Type>
		void swap(
			Type& _Left, 
			Type& _Right
		);
	*/
	int a = 3, b = 5;
	//a = 3, b = 5
	std::cout << "a = " << a << ", b = " << b << std::endl;
	std::swap(a, b);

	//a = 5, b = 3
	std::cout << "a = " << a << ", b = " << b << std::endl;
	std::cout << std::endl;

	/************************************************************************/
	//iter_swap:不推荐使用
	/************************************************************************/
	//iter_swap(a,b)等价于swap(*a, *b);
	/*
		template<class ForwardIterator1, class ForwardIterator2>
		void iter_swap(
			ForwardIterator1 _Left,
			ForwardIterator2 _Right
		);
	*/
	a = 3, b = 5;
	//a = 3, b = 5
	std::cout << "a = " << a << ", b = " << b << std::endl;
	std::iter_swap(&a, &b);

	//a = 5, b = 3
	std::cout << "a = " << a << ", b = " << b << std::endl;
	std::cout << std::endl;

	/************************************************************************/
	//swap_ranges
	/************************************************************************/
	//swap_ranges交换两个大小相同的区间
	/*
		template<class ForwardIterator1, class ForwardIterator2>
		ForwardIterator2 swap_ranges(
			ForwardIterator1 _First1, 
			ForwardIterator1 _Last1,
			ForwardIterator2 _First2
		);
	*/

	std::vector<int> iv1(3,3);    //3 3 3
	std::vector<int> iv2(4,6);    //6 6 6 6
	std::vector<int> iv3(9,2);    //2 2 2 2 2 2 2 2 2
	std::vector<int> iv4(6,1);    //1 1 1 1 1 1
	std::swap_ranges(iv1.begin(), iv1.end(), iv2.begin());
	typedef std::vector<int>::iterator it;
	it iv3Start = iv3.begin();
	it iv3End = iv3.end();
	it iv4Start = iv4.begin();
	std::advance(iv3Start, 3);
	std::advance(iv3End,-1);
	std::advance(iv4Start,1);
	std::swap_ranges(iv3Start, iv3End, iv4Start);

	std::vector<std::vector<int> > iv;
	iv.push_back(iv1);
	iv.push_back(iv2);
	iv.push_back(iv3);
	iv.push_back(iv4);

	std::for_each(iv.begin(), iv.end(), [](const std::vector<int> v)
	{
		std::for_each(v.begin(), v.end(),[](const int &i)
		{
			std::cout << i << " ";
		});
		std::cout << std::endl;
	});
	/*结果
	6 6 6 
	3 3 3 6 
	2 2 2 1 1 1 1 1 2 
	1 2 2 2 2 2 
	*/
	return 0;
}

====================打个广告,欢迎关注====================

QQ:412425870
csdn博客:
http://blog.csdn.net/caychen
码云:
https://gitee.com/caychen/
github:
https://github.com/caychen

点击群号或者扫描二维码即可加入QQ群:

328243383(1群)



点击群号或者扫描二维码即可加入QQ群:

180479701(2群)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值