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

How to reference an array position with a variable name

本文关键字:数组 位置 引用 何使用 变量名      更新时间:2023-10-16

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

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

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

cout << var[1] << endl;

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

你不能;变量名称在运行时不可用。

如果希望一个变量引用另一个变量,请使用引用或指针。例如

string * var = foo;
cout << var[1] << endl;

我能想到的唯一方法是使用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;

您还可以尝试以下使用元组的方法。例如

#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

我怀疑我是否理解这个问题,但也许结构化绑定声明(C++17)会有所帮助:

void Bla()
{
    std::wstring _name[] = { L"Bo", L"Selecta" };
    auto [FirstName, LastName] = _name;
    std::wcout << FirstName << L" " << LastName << L"n";
}

也适用于元组。