C++高级_STL常用的拷贝和替换算法详解

常用的拷贝和替换算法:

copy();                         复制序列

copy_backward();        与copy相同,不过元素是以相反顺序被拷贝。

replace();                     将指定范围内所有等于 old_value 的元素都用  新的值 代替。

replace_if();                 将指定范围内所有操作结果为true的元素用新值代替。

swap();                        交换存储在两个对象中的值。

copy()函数

将容器内元素拷贝到另一个容器中

copy(begin1, end1, begin2);

replace()函数

将容器指定范围内指定元素值替换成新值

replace(begin, end, old_value, new_value):

replace_if()函数

将指定范围内所有操作结果位true的元素替换为新值。

replace_if(degin, end, 谓词, new_value);

swap()函数

交换两个容器的内容(所有的元素)。

swap(容器1, 容器2);

下面是练习演示代码:

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

using namespace std;

void show(int &value)
{
	cout << value << " ";
}

void test_copy()
{
	vector<int> vec1;
	vector<int> vec2;

	for (int i = 0; i < 10; i++) {
		vec1.push_back(rand() % 20);
	}

	for_each(vec1.begin(), vec1.end(), show);
	cout << endl;

	vec2.resize(vec1.size());

	copy(vec1.begin(), vec1.end(), vec2.begin());

	for_each(vec2.begin(), vec2.end(), show);
	cout << endl;
}


void test_replace()
{
	vector<int> vec1;
	for (int i = 0; i < 10; i++) {
		vec1.push_back(rand() % 20);
	}

	vec1.push_back(3);
	vec1.push_back(3);
	vec1.push_back(3);

	replace(vec1.begin(), vec1.end(), 3, 33);


	for_each(vec1.begin(), vec1.end(), show);
	cout << endl;

	//将所有大于3的元素换成33

	replace_if(vec1.begin(), vec1.end(), bind2nd(greater<int>(), 3), 33);
	for_each(vec1.begin(), vec1.end(), show);
	cout << endl;
}

void test_Swap()
{
	//swap 不需要开辟空间
	vector<int> vec1;
	vector<int> vec2;

	for (int i = 0; i < 10; i++) {
		vec1.push_back(rand() % 20);
		vec2.push_back(rand() % 30);
	}
	for_each(vec1.begin(), vec1.end(), show);
	cout << endl;
	for_each(vec2.begin(), vec2.end(), show);
	cout << endl;

	swap(vec1, vec2);

	for_each(vec1.begin(), vec1.end(), show);
	cout << endl;
	for_each(vec2.begin(), vec2.end(), show);
	cout << endl;
}

int main(void)
{
	
	//test_copy();
	//test_replace();
	test_Swap();
	return 0;
}

 

 

 

暂无评论

发表评论