我在c ++中编写了一个函数,它接收一个struct作为输入。收到的struct对象有两个数组。我需要将这两个数组用于不同的目的。数组名称已以特定格式创建。如何检索字符串中的数组名称。
struct INFO
{
float fADataLHS[3] = {1,2,3};
float fADataRHS[3] = {4,5,6};
已定义Struct INFO,其中已定义两个数组已初始化。函数useStruct将这两个函数用于不同的目的。
void useStruct(struct *INFO)
{
--------;
--------;
}
int main()
{
struct INFO info;
useStruct(info);
}
我想要一个方法,我可以在其中检索数组的名称。 fAdataLHS并将其存储到字符串中。我们的想法是从字符串名称中找到子字符串LHS和RHS,然后进行处理。
PS:我对c ++很新。
答案 0 :(得分:2)
我会很简单,因为你是C ++的初学者。
如果你想将这两个数组用于不同的目的,那就干嘛。例如:
void use_array_for_different_purposes(INFO *info)
{
// Purpose one, printing values using fADataLHS.
for (int i = 0; i < 3; i++) {cout << info->fADataLHS[i] << endl;}
// Purpose two, computing total sum using fADataRHS.
int acum;
for (int i = 0; i < 3; i++) {acum += info->fADataRHS[i];}
}
如您所见,您不需要将数组名称作为字符串值。
答案 1 :(得分:0)
如果我理解为corectly,那么你的用例就是:你有两个(或更多)名字,每个名字都有一个浮点数组。您希望按名称获取数组并处理数据。
考虑以下代码:
class INFO
{
std::map<std::string, std::vector<float>> vectors;
public:
INFO() : vectors{}
{
vectors["fADataLHS"] = { 1, 2, 3 };
vectors["fADataRHS"] = { 4, 5, 6 };
}
const std::vector<float>& operator[](const std::string& key) const // access vector by key
{
return vectors.at(key);
}
};
void useStruct(const INFO& info) // pass instance by const reference
{
std::cout << info["fADataLHS"][0] << "\n"; // access element 0 from the fADataLHS array
// get the entire array:
const auto& arr = info["fADataRHS"];
// this will throw a std::out_of_bounds
const auto& arr = info["non-existent-key"];
}
编辑:其他一些说明:
float
- 使用double
代替operator[]
的非常量版本