使用变量名称引用数组位置的最简单方法是什么?
string var = "foo";
string foo[] = { "My name is Bob", "My name is Tom" };
在这种情况下,我想打印变量var引用的数组的第二个元素。我将有一些不同的数组,变量'var'将不断更改为不同数组的名称。我试过了:
cout << var[1] << endl;
但是,当然,这只会返回字符串中的第二个字符,因为它是一组字符。但我想引用名称foo,索引为1。 我该怎么做呢?
答案 0 :(得分:3)
我能想到的唯一方法是使用std::map
。
std::map<std::string, std::vector<std::string>> mapOfArrays;
mapOfArrays["foo"] = { "My name is Bob", "My name is Tom" };
mapOfArrays["bar"] = { "My name is Jim", "My name is Sam" };
std::cout << mapOfArrays["foo"][1] << std::endl;
std::cout << mapOfArrays["bar"][1] << std::endl;
答案 1 :(得分:2)
你不能;变量名在运行时不可用。
如果您希望一个变量引用另一个变量,请使用引用或指针。例如,
string * var = foo;
cout << var[1] << endl;
答案 2 :(得分:0)
您还可以使用元组尝试以下方法。例如
#include <iostream>
#include <tuple>
#include <string>
#include <functional>
int main()
{
std::string bar = "foo";
std::string foo[] = { "My name is Bob", "My name is Tom" };
auto var = std::make_tuple( std::ref( bar ), std::ref( foo ) );
std::cout << std::get<0>( var )[0] << std::endl;
std::cout << std::get<1>( var )[0] << std::endl;
return 0;
}
输出
f
My name is Bob