C ++如何制作二维矢量函数?

C++ How to make a 2D Vector function?

我正在尝试用 C++ 创建一个 return 是二维向量的函数。 该函数也有一个 2D 向量作为参数,这个想法是 return 这个 2D 向量的修改版本,带有函数。

我不会把我的整个代码放在这里,因为这完全不是问题,但总结一下函数看起来像这样:

using std::vector;

vector<vector<char> > function(vector<vector<char> > grid) {

    int width = static_cast<int>(grid.front().size());
    int height = static_cast<int>(grid.size());

    for(int y=0; y < height; ++y) 
    {
        for(int x=0; x < width; ++x) 
        {
            grid[y][x]= 'H';
        }
    }
    return grid;   
}

然后我会在 main 中做:

vector<vector<char> > new_grid = function(grid);

但它并不像我使用的那样有效,所以我有几个问题:

  1. 二维向量函数大小要不要初始化?
  2. 我可以在函数内部更改 grid 的大小和 return 更大的二维向量吗?
  3. 而且,这可能是一个愚蠢的问题,但是,实际上是否可以在不使用 return 的情况下在函数中检索值、数组、字符串?

感谢您的帮助!

如果你愿意,我可以展示我的整个代码,但它很大,可能不太清楚。

回答您的问题:

  1. 如果您试图循环遍历一个向量来设置它的值,那么是的,它需要被初始化。如果调用默认构造函数,则向量以 0 个元素开头。要设置大小,您可以调用 grid.resize(new_size),现在网格内的所有向量的大小也为零,因此您可以遍历网格并调整所有这些向量的大小...
  2. 是的,您可以更改它的大小和 return 更大的矢量,使用 .resize 这不会影响您的原始网格,因为您传递的是它的副本而不是参考
  3. 是的,您可以从 void 函数中检索值,如果您创建对变量的引用作为参数,则可以修改该变量的值。您可以在这里阅读:http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

如果您不更改原始网格,通过 const 引用传递它可能是个好主意,这样您就不会制作太多副本。