永发信息网

C++函数replace问题!(谢谢解答!)

答案:3  悬赏:50  手机版
解决时间 2021-02-12 01:55
各位前辈们你们好!我想调用函数replace进行一个数组里面元素的替换工作。但是
int *end_rep=replace(a,a+5,old,new_num);
这一个参数不知道那里出问题了,希望您的解答谢谢!
#include
#include

using namespace std;

int main()
{
int a[5]={1,2,3,4,5};
int *p=a;
int old;
cout<<"请选输入被替换的元素:\n";
cin>>old;
int new_num;
cout<<"请输入新的元素:\n";
cin>>new_num;
int *end_rep=replace(a,a+5,old,new_num);
while(p!=end_rep)
{
cout<<*p<<"\t";
p++;
}
free(p);
return 0;
}
最佳答案
replace的返回值为void,不是int*
Defined in header     
template< class ForwardIt, class T >
void replace( ForwardIt first, ForwardIt last,              const T& old_value, const T& new_value );    (1)    
template< class ForwardIt, class UnaryPredicate, class T >
void replace_if( ForwardIt first, ForwardIt last,                 UnaryPredicate p, const T& new_value ); 猜想你是想替换数组里面的某个值,可以这样写:
#include 
#include 
using namespace std;

int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int *p = a;//实际上 p没用到,可以注掉
int old;
cout << "请选输入被替换的元素:\n";
cin >> old;
int new_num;
cout << "请输入新的元素:\n";
cin >> new_num;
//   replace(a, a + 5, old, new_num);
// //  while (p != end_rep)
// //  {
// //  cout << *p << "\t";
// //  p++;
// //  }
//猜想你是想替换掉数组中的某个值,可以如下编写:
replace_if(a, a + 5, [old](int iVcomp) ->bool{ return iVcomp == old; }, new_num);

//free(p);//不应该free,指向的是一个局部数组的地址,数组会自己销毁
return 0;
}关于 replace_if的第三个参数,那个lambda,你可以查找相关资料。或者你也可以查下函数对象相关资料
全部回答
c里的参数传递都是按值传递,参数到函数里就变成函数的局部变量了,所以如果你想在其他函数里修改实参本身,可以采用传递实参地址的方式进行: #include"stdio.h" int strick(int* a,int* b,int* c) { int sum = *a + *b + *c; *b = *b + *c; return sum; } main() { int a=1,b=2,c=3,sum; sum = strick(&a,&b,&c); printf("%5d%5d%5d%5d",a,b,c,sum); }
replace返回值是void类型 你赋值给int*肯定是会出错的。 #include #include using namespace std; int main() { int a[5]={1,2,3,4,5}; //int *p=a; int old; cout<<"请选输入被替换的元素:\n"; cin>>old; int new_num; cout<<"请输入新的元素:\n"; cin>>new_num; replace(a,a+5,old,new_num); for (int i=0;i<5;i++) { cout << a[i] << " "; } cout << endl; system("pause"); //while(p!=end_rep) //{ // cout<<*p<<"\t"; // p++; //} ////free(p); return 0; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
特大号寿衣批发怎么去啊,我要去那办事
初级会计职称现在是要考还是直接评
独山公墓业务处地址在什么地方,想过去办事
玉皇新苑在哪里啊,我有事要去这个地方
瑞安市新江南新区公租房公布名单
引歌一梦什么时候免费
紫山汇仙陵园怎么去啊,我要去那办事
别克英朗老少水是什么原因
宜昌市职业病防治院地址在哪,我要去那里办事
对于位于十字路口的房地产来说,如果不考虑周
正定距河北富平多少公里
南阳市烈士陵园怎么去啊,我要去那办事
小马宝莉里第10集的歌曲叫什么
卡西欧海门大东方百货专柜在什么地方啊,我要
单选题厨师做馒头和面包时要用到下列哪种微生
推荐资讯
两岁孩子咬住自己的嘴里面咬破了怎么办
征集暑季促销广告语主题及创意。(诉求重点,
天天乐幼儿园(烧沟村路)地址在什么地方,想过
我现在进入IT行业,想从软件学起走,但我一点
酷派大神f2移动手机版能否破解成联通4g
有首好听的英文歌,其中有句歌词是"whenever y
金逸国际影城龙华分店今天有什么电影
物体从高处自由落下时,经过的距离S与时间T之
在杭州灵隐寺办理皈依证好办吗?
前几天我家的猫死了,今天早晨,上班的时候,
为什么女人打架喜欢扯头发,扒衣服裤子,男人
华强汽修一站式服务地址在什么地方,我要处理
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?