【问题标题】:Passing a 2 dimensional vector in Class OOP在 OOP 类中传递二维向量
【发布时间】:2013-03-22 05:33:51
【问题描述】:

我对使用 OOP 传递二维向量感到困惑

例如:

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

int main() {};

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

我试过了,

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();
};

但这似乎完全失败了。

谢谢

【问题讨论】:

    标签: c++ oop class vector 2d


    【解决方案1】:

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

    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 会自动增加大小。

    【讨论】:

      【解决方案2】:
      for(int i = 0; i < 100; i++)
         for(int j = 0; j < 100; j++)
          //high[i].[j]
          //high.at(i).at(j)
      

      我是这样想的。

      【讨论】:

        猜你喜欢
        • 2020-06-10
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 2014-03-10
        • 2020-07-14
        • 1970-01-01
        相关资源
        最近更新 更多