是否可以在c ++中为变量使用动态名称

时间:2015-03-25 13:45:40

标签: c++

如果有可能,我想使用动态名称。这是一个关于我的意思的例子:

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时)。 这有可能以类似的方式吗?

5 个答案:

答案 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;

另一种选择是将值复制到数组中,处理数组并将其复制回来。