如何在c++中使用变量中的变量
How to use a variable in a variable in C++?
我想让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
是在编译时未定义的变量的数量。
我想这会解决你的问题。
无论如何,为了完整起见,还有另一种方法可以"寻址"具有名称的变量。原理是相同的,但是可以使用字符串名称代替数字索引。这可以通过使用map
或hash
来实现。
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';
}
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 执行函数时导致崩溃的变量
- 变量没有改变?通过向量的函数调用