• 【C++编程语言】之STL常用算法之 拷贝和替换算法 copy()函数 replace()函数 replace_if()函数 swap()函数


    1.常用拷贝和替换算法

    算法简介

    • copy 容器内指定范围元素拷贝到另一个容器中
    • replace 将容器内指定范围的旧元素修改为新元素
    • replace_if 容器内指定范围满足条件的元素替换为新元素
    • swap 互换两个容器的元素
    2.copy 将容器指定范围的元素拷贝到另一容器中
    /*
    	函数原型:
    		copy(iterator beg ,iterator end,iterator dest);
    		把指定范围内的元素 拷贝到指定容器内 
    		beg  开始迭代器
    		end  结束迭代器
    		dest 指定容器的开始迭代器
    */
    void myPrint(int val) {
    	cout<<val<<" ";
    }
    void test01() {
    
    	vector<int> v;
    	v.push_back(10);
    	v.push_back(30);
    	v.push_back(50);
    	v.push_back(20);
    	v.push_back(40);
    
    	vector<int> v2;
    	//对于指定容器要提前开辟空间
    	v2.resize(v.size());
        //拷贝
    	copy(v.begin(),v.end(),v2.begin());
    	for_each(v2.begin(), v2.end(), myPrint);
    }
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }
    
    • 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
    2.replace 将指定容器内指定范围的旧元素修改为新元素
    /*
    	函数原型:
    		replace(iterator beg ,iterator end,oldvalue ,newvalue);
    		将区间内旧元素替换成新元素
    		beg  开始迭代器
    		end  结束迭代器
    		oldvalue 旧元素
    		newvalue 新元素
    */
    void myPrint(int val) {
    	cout<<val<<" ";
    }
    void test01() {
    
    	vector<int> v;
    	v.push_back(10);
    	v.push_back(30);
    	v.push_back(50);
    	v.push_back(20);
    	v.push_back(40);
    
    	cout<<" 替换前: " << endl;
    	for_each(v.begin(), v.end(), myPrint);
    	
    	cout << "替换后: " << endl;
    	replace(v.begin(),v.end(),20,2000);
    	for_each(v.begin(), v.end(), myPrint);
        
        //替换前:
    	//10 30 50 20 40
        //替换后:
    	//10 30 50 2000 40
    }
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }
    
    • 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
    3.replace_if 将区间内满足条件的元素,替换成指定元素
    /*
    	函数原型:
    		replace_if(iterator beg ,iterator end,_pred,newvalue);
    		按条件替换,满足条件的替换成指定元素
    		beg  开始迭代器
    		end  结束迭代器
    		_pred 谓词
    		newvalue 新元素
    */
    void myPrint(int val) {
    	cout<<val<<" ";
    }
    class Great30 {
    public:
    	bool operater()(int val){
    		return val >= 30;
    	}
    };
    void test01() {
    
    	vector<int> v;
    	v.push_back(10);
    	v.push_back(30);
    	v.push_back(50);
    	v.push_back(20);
    	v.push_back(40);
    
    	//将大于等于30   替换为3000
    	cout<<" 替换前: " << endl;
    	for_each(v.begin(), v.end(), myPrint);
    	
    	cout << "替换后: " << endl;
    	replace_if(v.begin(),v.end(), Great30(), 2000);
    	for_each(v.begin(), v.end(), myPrint);
    }
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }
    
    • 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
    4.swap 互换两个容器的元素
    /*
    	函数原型:
    		swap(container c1 ,container c2);
    		互换两个容器的元素  
    		注意:互换的两个容器必须是同类型的
    		c1 容器1
    		c2 容器2
    */
    void myPrint(int val) {
    	cout<<val<<" ";
    }
    void test01() {
    
    	vector<int> v1;
    	vector<int> v2;
    	for (int i = 0; i < 10; i++) {
    		v1.push_back(i);
    		v2.push_back(i+102);
    	}
    	
    	cout<<" 交换前: " << endl;
    	for_each(v1.begin(), v1.end(), myPrint);
    	cout << endl;
    	for_each(v2.begin(), v2.end(), myPrint);
    	cout << endl;
    
    	cout << "交换后: " << endl;
    	swap(v1, v2);
    	for_each(v1.begin(), v1.end(), myPrint);
    	cout << endl;
    	for_each(v2.begin(), v2.end(), myPrint);
    }
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }
    
    • 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
  • 相关阅读:
    flutter学习之widget的显示和隐藏
    iOS代码混淆教程
    Forescout宣布任命Rik Ferguson为安全情报副总裁
    python基础06——控制流语句:顺序、分支、循环
    Elasticsearch:使用 Amazon Bedrock 的 semantic_text
    Golang 在 Mac、Linux、Windows 下如何交叉编译
    TypeError: res.data.map is not a function微信小程序报错
    【云原生系列第六章】---Serverless架构的应用场景
    桌面软件开发框架大赏
    Pulsar 社区周报 | No.2024-06-07 | Apache Pulsar 新分支 3.3 版本发布
  • 原文地址:https://blog.csdn.net/kaszxc/article/details/127758556