如何在c++中使用变量中的变量

How to use a variable in a variable in C++?

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

我想让num显示nr1, nr2和nr3的值。ide吗?谢谢! !

#include <iostream>
#include "../std_lib_facilities.h"
using namespace std;
int main() {
    int count=3;
    string num;
    double nr1=111;
    double nr2=222;
    double nr3=333;
    for(int i=1;i<=count;i++) {
        ostringstream number {};
        number << "nr" << i;
        num=number.str();
        cout << "Num: " << num << endl;
    }
}

如果你的意图是通过一个运行时字符串引用一个变量,你不能这样做。(例如,在php中,您可以使用$$variable,而在 c++ 中,则没有这种功能)。最类似的方法是使用预处理器,但我强烈建议您避免使用它,因为通常这种解决方案非常"肮脏"

相反,最简单和最优的解决方案是使用数组,然后使用索引访问变量。

一个小例子:

int main(int argc, char *argv[]) {
  std::array<double, 3> nrs = {111, 222, 333};
  for (int i = 0; i < nrs.size(); ++i) {
    std::cout << "Num" << i + 1 << ": " << nrs[i] << 'n';
  }
  return 0;
}

这种方法有很多变体,例如:您可以使用std::vector是在编译时未定义的变量的数量。

我想这会解决你的问题。

无论如何,为了完整起见,还有另一种方法可以"寻址"具有名称的变量。原理是相同的,但是可以使用字符串名称代替数字索引。

这可以通过使用maphash来实现。

int main(int argc, char *argv[]) {
  std::map<std::string, double> nrs = {std::make_pair("nr1", 111),
                                       std::make_pair("nr2", 222),
                                       std::make_pair("nr3", 333)};
  for (int i = 0; i < nrs.size(); ++i) {
    std::string num = "nr" + std::to_string(i + 1);
    std::cout << num << ": " << nrs.at(num) << 'n';
  }
  return 0;
}

因此,通过at方法,您可以访问与该名称相关的值。

注意:如果没有找到变量名,并且您尝试访问将抛出异常。

这样做的典型方法是使用std::map:

int main()
{
    std::map<std::string, double> nums;
    nums["nr1"] = 111;
    nums["nr2"] = 222;
    nums["nr3"] = 333;
    for(int i = 1; i <= 3; i++)
    {
        std::ostringstream number;
        number << "nr" << i;
        std::string num = number.str();
        std::cout << "Num: " << nums[num] << 'n';
    }
}