25.STL_算法(16)_复制元素 copy() copy_backward()

copy()

copy_backward()

以上两个对所有容器都适用的

注意:

1, 没有copy_if()算法,可以使用remove_copy_if()算法;

2,复制过程中要逆转元素次序,使用reverse_copy()算法;

3,把容器内所有元素赋值给另一个容器,要使用赋值操作符或者容器的assign()成员函数;

4,复制过程中删除某些元素,使用remove_copy()和remove_copy_if()算法;

5,复制中改变元素,使用transform()或replace_copy()算法。

STL算法——修改性算法

for_each()   generate()

copy()   generate_n()

copy_backward()   replace()

transform() replace_if()

merge() replace_copy()

swap_ranges() replace_copy_if()

fill()

fill_n()

#include<iostream>
#include<algorithm>
#include<vector>
#include<list>

using namespace std;

int main()
{
	list<int> ilist;
	for (int i = 0; i < 10; i++)
		ilist.push_back(i);
	for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

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

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

	copy_backward(ilist.begin(), ilist.end(), ivec.end());
	for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
		cout << *iter << ' ';
	cout << endl;
	//
	system("pause");
	return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
#include<list>

using namespace std;

int main()
{
	vector<int> ivec;
	list<int> ilist(9);// 拷贝之前必须保证有足够的空间

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

	copy(ivec.begin(), ivec.end(), ilist.begin());
	for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	//
	system("pause");
	return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
#include<list>
//
#include<iterator>

using namespace std;

int main()
{
	vector<int> ivec;
	list<int> ilist;

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

	// back_insert 插入型迭代器
	copy(ivec.begin(), ivec.end(), back_inserter(ilist));
	for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	//
	system("pause");
	return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
#include<list>
//
#include<iterator>

using namespace std;

int main()
{
	vector<int> ivec;
	list<int> ilist;

	for (int i = 1; i < 10; i++)
		ivec.push_back(i);

	// back_insert 插入型迭代器
	copy(ivec.begin(), ivec.end(), back_inserter(ilist));
	for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); iter++)
		cout << *iter << ' ';
	cout << endl;

	// 利用输出流适配器
	copy(ivec.begin(), ivec.end(), ostream_iterator<int>(cout, " "));
	cout << endl;

	// 逆向迭代器 <span style="color: rgb(255, 0, 0);">reverse_copy()比下面的这个方法,速度快</span>
	copy(ivec.rbegin(), ivec.rend(), ilist.begin());
	copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "));// 显示

	/*for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); iter++)
		cout << *iter << ' ';
	cout << endl;*/
	//
	system("pause");
	return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main()
{
	vector<char> source(10, '.');
	for (int c = 'a'; c <= 'f'; c++)
	{
		source.push_back(c);
	}
	source.insert(source.end(), 10, '.');

	for (vector<char>::iterator iter = source.begin(); iter != source.end(); iter++)
		cout << *iter;
	cout << endl;

	vector<char> c1(source.begin(), source.end());
	copy(c1.begin() + 10, c1.begin() + 16, c1.begin() + 7);
	for (vector<char>::iterator iter = c1.begin(); iter != c1.end(); iter++)
		cout << *iter;
	cout << endl;

	//
	system("pause");
	return 0;
}

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

using namespace std;

int main()
{
	vector<char> source(10, '.');
	for (int c = 'a'; c <= 'f'; c++)
	{
		source.push_back(c);
	}
	source.insert(source.end(), 10, '.');

	for (vector<char>::iterator iter = source.begin(); iter != source.end(); iter++)
		cout << *iter;
	cout << endl;

	vector<char> c1(source.begin(), source.end());
	copy(c1.begin() + 10, c1.begin() + 16, c1.begin() + 7);
	for (vector<char>::iterator iter = c1.begin(); iter != c1.end(); iter++)
		cout << *iter;
	cout << endl;

	vector<char> c2(source.begin(), source.end());
	copy_backward(c2.begin() + 10, c2.begin() + 16, c2.begin() + 19);
	for (vector<char>::iterator iter = c2.begin(); iter != c2.end(); iter++)
		cout << *iter;
	cout << endl;

	//
	system("pause");
	return 0;
}

时间: 2024-08-07 04:24:08

25.STL_算法(16)_复制元素 copy() copy_backward()的相关文章

STL_算法(21)_ STL_算法_填充新值

STL_算法_填充新值 fill(b, e, v) fill(b, n, v) generate(b, n, p) generate_n(b, n, p) #include<iostream> #include<algorithm> #include<vector> #include<list> // #include<string> using namespace std; int main() { list<string> sli

STL_算法(22)_ STL_算法_替换算法

replace(b, e, ov, nv) replace_if(b, e, p, v) // 一边复制一遍替换 replace_copy(b1, e1, b2, ov, nv) replace_copy_if(b1, e1, b2, p, v) // 带有一个函数对象或者规则 #include<iostream> #include<algorithm> #include<list> // #include<functional> using namespa

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; f

Oracle 11 g duplicate功能_复制dataguard备库

Qracle 11g duplicate功能 不用备份源库,通过网络复制出standby库 1.在standby上grid用户配置listener 注意是指定oracle用户的家目录: 监听状态: [[email protected] ~]$lsnrctl LSNRCTL for Linux:Version 11.2.0.4.0 - Production on 19-MAY-2014 18:46:15 Copyright (c)1991, 2013, Oracle.  All rights re

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

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

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

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

算法题:复制复杂链表之空间换时间法

说明:本文仅供学习交流,转载请标明出处,欢迎转载!  题目:复制一个复杂链表,所谓复杂链表指的是每个节点含有两个指针,一个指向单链表的下一个结点,一个指向单链表中的任意某个结点,或者该指针为空. 为了方便起见,我们将待复制的链表称为原型链表,将复制后的新链表称为复制链表,将指向下一个结点的指针定义为next指针,指向其他位置的指针定义为any指针.<剑指offer>上给出了三种解决方法:(1)常规法:(2)空间换时间法:(3)紧随复制法.书上并给出了第三种方法的实现代码.这里我根据书上的提示,

算法题:复制复杂链表之复制连接法

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章算法题:复制复杂链表之空间换时间法我们给出了用映射的方法来为新复制的链表中的每个结点设置any指针,本文给出的是<剑指offer>上给出的算法与代码,<剑指offer>上提到该算法的实现三个步骤:        第一步:复制原始链表的任意结点N并创建新结点N',在把N'连接到N的后面:        第二步:设置每个结点的any指针:        第三步:将长链表分成两个链表,一个是原始链表,另外一个就是我们所要求的复制

算法竞赛_入门经典_刘汝佳__(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_