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

Posted

技术标签:

【中文标题】C++ 如何制作二维向量函数?【英文标题】:C++ How to make a 2D Vector function? 【发布时间】:2016-12-21 13:58:57 【问题描述】:

我正在尝试在 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;   

然后我会在 ma​​in 中做:

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

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

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

感谢您的帮助!

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

【问题讨论】:

它如何不起作用 在使用[] 运算符访问任何向量元素之前,您需要使用resize() 函数。 如果grid.size() == 0,调用grid.front ()是UB。 @NathanOliver 我在编译时得到错误control reaches end of non-void function [-Wreturn-type]。 @πάνταῥεῖ 我真的不明白为什么我应该在使用 [ ]operator 之前使用 resize() @ReblochonMasqué 你得到你所展示的功能的错误?对我来说,使用此功能似乎不会出现该错误。请发布minimal reproducible example 并在问题中包含实际的编译器错误。 【参考方案1】:

回答您的问题:

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

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

【讨论】:

谢谢,这很有帮助!

以上是关于C++ 如何制作二维向量函数?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 C++ 中将二维数组/向量作为函数参数传递? [复制]

如何将 C# 中的二维数组传递给 C++ DLL?

如何从输入字符串制作二维向量?

如何在 QT 中制作二维数组?

在 C++ 中使用二维向量乘以矩阵

C++中关于属性向量的查询