std::replace 位于#include <algorithm>中
主要作用是替换字符串的字符或者容器的元素

下面看一下 std::replace 的源码:

template<class _FwdIt,class _Ty> inline
void replace(_FwdIt _First, _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval)
{	// replace each matching _Oldval with _Newval
	_DEBUG_RANGE(_First, _Last);
	_Replace_unchecked(_Unchecked(_First), _Unchecked(_Last),
		_Oldval, _Newval);
}

_Replace_unchecked 的源码:

_Replace_unchecked 的源码:
template<class _FwdIt,class _Ty> inline
void _Replace_unchecked(_FwdIt _First, _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval)
{	// replace each matching _Oldval with _Newval
	for (; _First != _Last; ++_First)
		if (*_First == _Oldval)
			*_First = _Newval;
}

发现其主要采用的是泛型编程即模板编程的方法,
通过遍历传入进来的_First,如果_First不等于_Last,就会继续遍历,
直到找到我们想替换的_Oldval,然后通过赋值操作进行替换。

栗子1:

std::string str1="hello,world,"
//把最后一个逗号替换成换行符 
str1.replace(str1.find_last_of(","),1,"\n"); 

输出结果:

栗子2:

std::string str2="c++ is a language";
//把某个字符替换成新字符,c++替换为javascript
str2.replace(str2,find("c++"),3,"javascript");

输出结果:

如果改成str2.replace(str2,find("c++"),20,"javascript") 这时只输出javascript。

栗子3:

//替换等于1的所有数
vector<int> v{ 1,2,3,4,5,6,1 };
std::replace(v.begin(), v.end(), 1, 66);

for (auto i : v) {
	cout << i << " ";
}
std::cout << std::endl;

//替换小于4的所有数
std::replace_if(v.begin(), v.end(),std::bind(std::less<int>(), std::placeholders::_1, 4), 99);
for (int i : v) {
	std::cout << i << " ";
}
std::cout << std::endl;

输出:

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐