C++函数replace问题!(谢谢解答!)
解决时间 2021-02-12 01:55
- 提问者网友:战皆罪
- 2021-02-11 15:47
各位前辈们你们好!我想调用函数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;
}
最佳答案
- 五星知识达人网友:北方的南先生
- 2021-02-11 16:16
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;
}
我要举报
大家都在看
推荐资讯