0

我正在尝试在 C++ 中创建一个返回二维向量的函数。该函数还具有一个 2D 向量作为参数,其想法是使用该函数返回此 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;   
}

然后我会主要做:

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

但它在我使用它的方式上不起作用,所以我有几个问题:

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

谢谢你的帮助 !

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

4

1 回答 1

0

要回答您的问题:

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

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

于 2016-12-21T14:19:56.100 回答