如果有可能,我想使用动态名称。这是一个关于我的意思的例子:
int sol1,sol2;
for(int i=1; i<3; i++){
sol"i"=i*i;
return max(sol1,sol2);
}
sol"i"
我的意思是第一个周期{i = 1}时sol1
和第二个周期sol2
(当i = 2时)。
这有可能以类似的方式吗?
答案 0 :(得分:10)
不可以做你要求的事情,但是你应该找到同样具有表现力的替代方案。
最常见的方法可能是使用vector
(或数组)并将其编入索引:
std::vector<int> sol(2);
for (int i = 0; i < 2; ++i) {
sol[i] = i * i;
}
另一种方法是使用std::map
将所需名称映射到结果变量:
std::map<std::string, int> variables;
for (int i = 1; i < 3; ++i) {
std::string varname = "sol" + std::to_string(i);
variables[varname] = i * i;
}
但请注意,这是一个非常缓慢的解决方案。我之所以提到它只是因为它允许你做一些类似于原始例子的事情。改为使用矢量/数组方法。
答案 1 :(得分:2)
最好使用数组。
int sol[2];
for(int i = 0; i < 2; i++)
{
sol[i] = i*i;
}
return max(sol[0], sol[1]);
答案 2 :(得分:2)
这是不可能的。您可以改为使用数组:
int sol[2];
for(int i=0; i<2; i++){
sol[i]=i*i;
}
return max(sol[0],sol[1]);
请注意,在C ++中,数组是0索引的。
答案 3 :(得分:0)
不是一个简单的int数组,解决你的问题吗?!?
int sol[2];
for(int i=0; i<2; i++){
sol[i]=(i+1)*(i+1);
return max(sol[0],sol[1]);
}
答案 4 :(得分:0)
正如其他人所说,你所询问的是不可能的,但有许多替代解决方案。如果你可以使用它,最好使用C-array或std :: array of int。
但是假设变量名称不能更改(例如,它们是函数的参数,并且您不想更改签名),但您仍然希望通过索引来解决它们,因此您可以循环它们。一种方法是使用指针数组
int * sol[2] ={&sol0,&sol1};
*sol[0]=1;
这很有效,但在我看来这很难看。 另一个解决方案是使用元组:
std::tuple<int&,int&> sol=std::tie(sol0,sol1);
std::get<0>(sol)=1;
另一种选择是将值复制到数组中,处理数组并将其复制回来。