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

Is it possible to use dynamic name for variables in c++

本文关键字:动态 变量 c++ 是否      更新时间:2023-10-16

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

int sol1,sol2;
for(int i=1; i<3; i++){
   sol"i"=i*i;
   return max(sol1,sol2);
}

对于sol"i",我表示第一个周期中的sol1(当I=1时)和第二个周期的sol2(当I=2时)。这也有可能吗?

按照您的要求执行是不可能的,但您应该找到同样富有表现力的替代方案。

可能最常见的方法是使用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;
}

但是,请注意,这是一个极其缓慢的解决方案。我提到它只是因为它允许你做一些类似于你最初的例子的事情。请改用矢量/数组方法。

您最好使用数组。

int sol[2];
for(int i = 0; i < 2; i++)
{
  sol[i] = i*i;
}
return max(sol[0], sol[1]);

这是不可能的。您可以使用数组:

int sol[2];
for(int i=0; i<2; i++){
  sol[i]=i*i;
}
return max(sol[0],sol[1]);

请注意,在C++中,数组是0索引的。

正如其他人所说,你所问的是不可能的,但有很多替代解决方案。如果可以使用的话,使用C数组或std::数组的int是最好的方法

但假设变量名不能更改(例如,它们是函数的参数,您不想更改签名),但您仍然希望通过索引对它们进行寻址,这样您就可以循环使用它们。一种方法是使用指针数组

int * sol[2] ={&sol0,&sol1};
*sol[0]=1;

这行得通,但在我看来很难看。另一种解决方案是使用元组:

std::tuple<int&,int&> sol=std::tie(sol0,sol1);
std::get<0>(sol)=1;

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

一个简单的int数组不能解决您的问题吗?!?

int sol[2];
for(int i=0; i<2; i++){
  sol[i]=(i+1)*(i+1);
  return max(sol[0],sol[1]);
}