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 }

 

posted @ 2020-02-24 10:45  txwtech  阅读(249)  评论(0编辑  收藏  举报