cb42a_c++_STL_算法_替换_replace
cb42a_c++_STL_算法_替换_replace
replace(b,e,ov,nv),ov,old value, nv,new value
replace_if(b,e,p,v) 根据p的条件,全部更换成v的值
replace_copy(b1,e1,b2,ov,nv)//边复制变替换
replace_copy_if(b1,e1,b1,p,v)
error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可
bind2nd(less<int>(), 5),预定义函数对象,需要包含functional头文件名。
error C2955: “std::ostream_iterator”: 使用 类 模板 需要 模板 参数列表
ostream_iterator(cout, " ")少了一个<int>
ostream_iterator<int>(cout," ")
1>d:\users\txwtech\projects\cb42a\cb42a\cb42a.cpp(63): error C2672: “replace_if”: 未找到匹配的重载函数
1>d:\users\txwtech\projects\cb42a\cb42a\cb42a.cpp(63): error C2780: “void std::replace_if(const _FwdIt,const _FwdIt,_Pr,const _Ty &)”: 应输入 4 个参数,却提供了 5 个
参数写法错误。
replace_if(ilist2.begin(), ilist2.end(), ostream_iterator<int>(cout, " "), 5, 55);
正确写法:
replace_if(ilist.begin(), ilist.end(), bind2nd(less<int>(), 5), 0);
error C2275: “std::modulus<int>”: 将此类型用作表达式非法
bind2nd(modulus<int>(), 2),预定义函数对象<in>后面的小括号不要忘记了。
ostream_iterator<int>(cout, " ")流输出对象 ,#include <iterator>
1 /*cb42a_c++_STL_算法_替换_replace 2 replace(b,e,ov,nv),ov,old value, nv,new value 3 replace_if(b,e,p,v) 根据p的条件,全部更换成v的值 4 replace_copy(b1,e1,b2,ov,nv)//边复制变替换 5 replace_copy_if(b1,e1,b1,p,v) 6 7 8 9 error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;” 10 vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可 11 12 bind2nd(less<int>(), 5),预定义函数对象,需要包含functional头文件名。 13 error C2955: “std::ostream_iterator”: 使用 类 模板 需要 模板 参数列表 14 ostream_iterator(cout, " ")少了一个<int> 15 ostream_iterator<int>(cout," ") 16 17 1>d:\users\txwtech\projects\cb42a\cb42a\cb42a.cpp(63): error C2672: “replace_if”: 未找到匹配的重载函数 18 1>d:\users\txwtech\projects\cb42a\cb42a\cb42a.cpp(63): error C2780: “void std::replace_if(const _FwdIt,const _FwdIt,_Pr,const _Ty &)”: 应输入 4 个参数,却提供了 5 个 19 参数写法错误。 20 replace_if(ilist2.begin(), ilist2.end(), ostream_iterator<int>(cout, " "), 5, 55); 21 正确写法: 22 replace_if(ilist.begin(), ilist.end(), bind2nd(less<int>(), 5), 0); 23 24 error C2275: “std::modulus<int>”: 将此类型用作表达式非法 25 bind2nd(modulus<int>(), 2),预定义函数对象<in>后面的小括号不要忘记了。 26 27 ostream_iterator<int>(cout, " ")流输出对象 ,#include <iterator> 28 */ 29 30 #include <iostream> 31 #include <algorithm> 32 #include <vector> 33 #include <list> 34 #include <functional> 35 #include <iterator> 36 37 using namespace std; 38 template <typename TT> 39 void print(TT &ilist) 40 { 41 for (TT::iterator iter = ilist.begin(); iter != ilist.end(); ++iter) 42 cout << *iter << ' '; 43 cout << endl; 44 } 45 46 47 int main() 48 { 49 list<int> ilist; 50 for (int i = 1; i <= 7; ++i) 51 ilist.push_back(i); 52 for (int i = 4; i <= 9; ++i) 53 ilist.push_back(i); 54 print(ilist); 55 /*for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter) 56 cout << *iter << ' '; 57 cout << endl;*/ 58 59 cout << "所有6替换成42" << endl; 60 replace(ilist.begin(), ilist.end(), 6, 42); 61 print(ilist); 62 63 cout << "小于5的数替换成0" << endl; 64 replace_if(ilist.begin(), ilist.end(), bind2nd(less<int>(), 5), 0); 65 print(ilist); 66 67 list<int>ilist2; 68 for (int i = 2; i <= 6; ++i) 69 ilist2.push_back(i); 70 for (int i = 4; i <= 9; ++i) 71 ilist2.push_back(i); 72 print(ilist2); 73 74 cout << "边复制,边替换,5,替换成55,直接输出到cout" << endl; 75 replace_copy(ilist2.begin(), ilist2.end(), ostream_iterator<int>(cout, " "), 5, 55); 76 cout << endl; 77 cout << "边复制,边替换,小于5,替换成42,直接输出到cout" << endl; 78 replace_copy_if(ilist2.begin(), ilist2.end(), ostream_iterator<int>(cout, " "), bind2nd(less<int>(), 5), 42); 79 80 cout << endl; 81 cout << "边复制,边替换,取模2为1时,替换成0,直接输出到cout" << endl; 82 cout << "就是所有奇数替换成0" << endl; 83 replace_copy_if(ilist2.begin(), ilist2.end(), ostream_iterator<int>(cout, " "), bind2nd(modulus<int>(), 2), 0); 84 return 0; 85 }