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;
然后我会在 main 中做:
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++ 如何制作二维向量函数?的主要内容,如果未能解决你的问题,请参考以下文章