STL_算法(20)_ 交换算法 swap_range(b, e, b2)

swap_ranges(b, e, b2)

注意:下列两种方法也是交换算法

1,容器的swap()成员函数  方法快

2,赋值操作

交换算法对所有容器适用

#include<iostream>
#include<algorithm>
#include<vector>
#include<deque>

using namespace std;

int main()
{
	vector<int> ivec;
	deque<int>ideq;

	for (int i = 1; i <= 9; i++)
		ivec.push_back(i);
	for (int i = 11; i <= 23; i++)
		ideq.push_back(i);

	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	swap_ranges(ivec.begin(), ivec.end(), ideq.begin());
	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	//

	system("pause");
	return 0;
}

#include<iostream>
#include<algorithm>
#include<vector>
#include<deque>

using namespace std;

int main()
{
	vector<int> ivec;
	deque<int>ideq;

	for (int i = 1; i <= 9; i++)
		ivec.push_back(i);
	for (int i = 11; i <= 23; i++)
		ideq.push_back(i);

	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	deque<int>::iterator pos;

	// 返回值为第二个区间没有交换过来的数
	pos = swap_ranges(ivec.begin(), ivec.end(), ideq.begin());
	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	if (pos != ideq.end())
	{
		cout << "第一个没有交换的数:" << *pos << endl;
	}

	swap_ranges(ideq.begin(), ideq.begin() + 3, ideq.rbegin());
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	//

	system("pause");
	return 0;
}

#include<iostream>
#include<algorithm>
#include<vector>
#include<deque>

using namespace std;

int main()
{
	vector<int> ivec1;
	vector<int> ivec2;

	ivec1.push_back(1);
	ivec1.push_back(2);
	ivec1.push_back(3);

	ivec2.push_back(10);
	ivec2.push_back(20);
	ivec2.push_back(30);

	// swap 比swap_ranges 函数比较快
	//ivec1.swap(ivec2);// swap 方法最快
	ivec1 = ivec2;// 此方法比较慢
	cout << ivec1.at(0) << ' ' << ivec1.at(1) << ' ' << ivec1.at(2) << endl;

	vector<int> ivec;
	deque<int>ideq;

	for (int i = 1; i <= 9; i++)
		ivec.push_back(i);
	for (int i = 11; i <= 23; i++)
		ideq.push_back(i);

	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	deque<int>::iterator pos;

	// 返回值为第二个区间没有交换过来的数
	pos = swap_ranges(ivec.begin(), ivec.end(), ideq.begin());// 此方法也比较慢,但是可以把两个不同的容器的数据进行交换,相同的也行
	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	if (pos != ideq.end())
	{
		cout << "第一个没有交换的数:" << *pos << endl;
	}

	swap_ranges(ideq.begin(), ideq.begin() + 3, ideq.rbegin());
	for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	//

	system("pause");
	return 0;
}

时间: 2024-09-29 09:03:37

STL_算法(20)_ 交换算法 swap_range(b, e, b2)的相关文章

韩顺平_PHP程序员玩转算法公开课(第一季)01_算法重要性_五子棋算法_汉诺塔_回溯算法_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/ 课程说明:算法是程序的灵魂,为什么有些网站能够在高并发,和海量吞吐情况下依然坚如磐石,大家可能会说: 网站使用了服务器集群技术.数据库读写分离和缓存技术(比如memcahced和redis等),那如果我再深入的问一句,这些优化技术又是怎样被那些天才的技术高手设计出来的呢? 我在上大学的时候就在想,究竟是什么让不同的人写出的代码从功能看是一样的,但从运行效率上却有天壤之别, 就拿以前在软件公司工作的实际经历来说吧, 我是

算法复习_分治算法之二分搜索、棋盘覆盖、快速排序

一.基本概念 分治法,顾名思义,即分而治之的算法,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…… 二.基本思想及策略 设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之. 策略:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解.这种算法设计策略叫做分治法. 三

STL_算法_交换(swap_ranges)

C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) 所有容器适用 swap_ranges(b,e,b2)  //优点: 可局部交换.可以在不同类型容器间交换 注意:下列两种方法也是交换算法 1.容器的swap()成员函数 2.赋值操作 /**------http://blog.csdn.net/u010579068------**/ #include<iostream> #include<cstdio> #include<string> #incl

Breaseman算法绘制圆形|中点算法绘制圆形_程序片段

Breaseman算法绘制圆形|中点算法绘制圆形_程序片段 1. Breaseman算法绘制圆形程序 由于算法的特殊性,限制绘制第一象限部分,其他部分通过旋转绘制. 1 void CCGProjectWorkView::bresenHam_1P4Circle(int radium, const float lineColor[]) 2 { 3 int pointX, pointY, deltD, deltHD, deltDV, direction; 4 pointX = 0; 5 pointY

Cocos2d-x游戏开发_战斗算法

我的战斗算法的核心代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 private void aHitb(HeroBean a,HeroBean b){         ///*自身状态(已经移到aHitBTeam那里)         //判断A能否出招或者受到伤害什么的

算法实例_线性表 By:比方

算法实例_线性表 By:比方 什么是线性表? 从线性表的功能逻辑上来看,线性表就是由n(n>=0)个数据元素的排序组合,数据由x1,x2,x3,...,xn结构有序的顺序排列. 线性表的结构和特点 1.              仅有一个开始节点x1,没有直接前趋节点,有妾只有一个直接后续节点x2: 2.              仅有一个终结节点xn,仅有一个前趋节点xn-1; 3.              对于同一个线性表,其中没一个数据的元素,都必须具备相同的数据结构类型, 且没一个元素

算法实例_链表结构 By:比方

前一章,我们说到了顺序表结构,而顺序表也存在一些的缺点. 在插入或者删除节点的时候,需要移动的数据比较大,如果顺序表结构比较大,有时候比较难以分配足够的连续存储空间,可能会导致内存分配失败,而导致无法存储. 而今天我们讲解的链表结构则可以很好的解决这个问题,链表的结构是一种动态存储分配的结构形式,可以根据需要动态申请所需的内存单元. 一.什么是链表结构? a)         我们用head来表示头节点. b)         数据部分保存的是存储的数据,地址地方指向下一个数据的起始部分,依次向

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 1 /*简单交换法排序 2 根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 3 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动 4 不稳定 5 */ 6 #include<windows.h> 7 #include<stdio.h> 8 void main(){ 9 int i,j,arr[10

算法竞赛_入门经典_刘汝佳__(2)

1,有几位数字 #include<stdio.h> int main_2_1_digit(){ int n; while(scanf("%d",&n)){ int count = 0; if(n==0) count = 1; while(n){ count++; n/=10; } printf("%d\n",count); } return 0; } 2,三位数的三个数字 #include<stdio.h> int main_2_2_