返回多维数组

returning a multidimensional array

本文关键字:数组 返回      更新时间:2023-10-16
string THIRDSTEP::DispSched(string movie)
{
string data[6][7];
ifstream file("C:\Users\User\Desktop\MP 116\sched1.csv");
for (int row = 0; row < 7; row++)
{
string line;
getline(file, line);
if (!file.good())
break;
stringstream iss(line);
for (int col = 0; col < 6; col++)
{
string val;
getline(iss, val, ',');
if (!iss.good())
break;
stringstream converter(val);
converter >> data[row][col];
}
}
return 0;
}

此代码应返回一个多维数组。 但我不知道怎么做。 有什么想法吗?我认为应该使用指针,但是如何呢?

你需要返回一个引用或指向data的指针(即return &data)。

但是,一旦函数返回,data就会超出范围,因此仅此一项将毫无用处。您需要做的是将字符串数组传递给函数并让它对其进行编辑,或者通过使用newdelete显式控制数据的生存期。

我会说在这种情况下,在函数外部创建数据并传递对它的引用是最好的。

更改最少的示例

void THIRDSTEP::DispSched(string movie, string (&output)[6][7])
{
ifstream file("C:\Users\User\Desktop\MP 116\sched1.csv");
for (int row = 0; row < 6; row++)
{
string line;
getline(file, line);
if (!file.good())
break;
stringstream iss(line);
for (int col = 0; col < 7; col++)
{
string val;
getline(iss, val, ',');
if (!iss.good())
break;
stringstream converter(val);
converter >> output[row][col];
}
}
}

附带说明一下,您希望避免在循环中使用 7 和 6 等幻数。尝试创建一个 std::vector 的 std::vector,并使用它的迭代器来查找结尾,而不是硬编码其大小。

一种可能的解决方案:

struct MyStrings
{
string s[6][7];
};
MyStrings THIRDSTEP::DispSched(string movie)
{
MyStrings strings;
strings.s[2][3] = movie;
return strings;
}