在类OOP中传递二维向量

Passing a 2 dimensional vector in Class OOP

本文关键字:二维 向量 OOP 在类      更新时间:2023-10-16

我对使用OOP 传递2D矢量感到困惑

例如:

class ABC
{
public:
    void function() 
    {
     vector<vector<string>> high;
     for ( int i=0; i<100; i++ )
     {
         high[0].push_back(i);
     }
    }
};
int main() {};

在函数中,我进行了一些计算,结果存储在2D数组中(高(。我需要整个二维数组传递给主函数,我该怎么做?

我试过了,

class ABC{
public:
    vector<vector<string>> function ()
    {
    vector<vector<string>> high;
    for ( int i=0; i<100; i++ )
    {
    high[0].push_back(i);
    }
    }
};
int main()
{
ABC abc;
abc.function();
};

但这似乎是一次彻底的失败。

感谢

您需要从以下函数返回数组:

vector<vector<string>> function ()
{
    vector<vector<string>> high;
    high.resize(1);   // <-- note this resize, because you are using high[0] 
                      //     element later
    for ( int i=0; i<100; i++ )
    {
        high[0].push_back("some data...");
    }
    return high;      // <-- note this return statement
}

main调用function以获取如下数据:

vector<vector<string>> data = function();

另一个更有效的解决方案是在main中创建数组,并通过对function:的非常量引用将其传递

class ABC{
public:
void function (vector<vector<string>>& high)
{
    high.resize(1);
    for ( int i=0; i<100; i++ )
    {
        high[0].push_back("some data...");
    }
}
};
int main()
{
    ABC abc;
    vector<vector<string>> high;
    abc.function(high);
};

还要确保向量包含要访问的元素。例如,high[0]访问第一矢量元素。使用resize更改大小。请注意,push_back会自动增大大小。

for(int i = 0; i < 100; i++)
   for(int j = 0; j < 100; j++)
    //high[i].[j]
    //high.at(i).at(j)

我是这样想的。