如何使用变量名引用数组位置

时间:2015-01-07 17:54:45

标签: c++ arrays string reference

使用变量名称引用数组位置的最简单方法是什么?

string var = "foo";
string foo[] = { "My name is Bob", "My name is Tom" };

在这种情况下,我想打印变量var引用的数组的第二个元素。我将有一些不同的数组,变量'var'将不断更改为不同数组的名称。我试过了:

cout << var[1] << endl;

但是,当然,这只会返回字符串中的第二个字符,因为它是一组字符。但我想引用名称foo,索引为1。 我该怎么做呢?

3 个答案:

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