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);
但它并不像我使用的那样有效,所以我有几个问题:
- 二维向量函数大小要不要初始化?
- 我可以在函数内部更改
grid
的大小和 return 更大的二维向量吗?
- 而且,这可能是一个愚蠢的问题,但是,实际上是否可以在不使用 return 的情况下在函数中检索值、数组、字符串?
感谢您的帮助!
如果你愿意,我可以展示我的整个代码,但它很大,可能不太清楚。
回答您的问题:
- 如果您试图循环遍历一个向量来设置它的值,那么是的,它需要被初始化。如果调用默认构造函数,则向量以 0 个元素开头。要设置大小,您可以调用
grid.resize(new_size)
,现在网格内的所有向量的大小也为零,因此您可以遍历网格并调整所有这些向量的大小...
- 是的,您可以更改它的大小和 return 更大的矢量,使用
.resize
这不会影响您的原始网格,因为您传递的是它的副本而不是参考
- 是的,您可以从 void 函数中检索值,如果您创建对变量的引用作为参数,则可以修改该变量的值。您可以在这里阅读:http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
如果您不更改原始网格,通过 const 引用传递它可能是个好主意,这样您就不会制作太多副本。
我正在尝试用 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);
但它并不像我使用的那样有效,所以我有几个问题:
- 二维向量函数大小要不要初始化?
- 我可以在函数内部更改
grid
的大小和 return 更大的二维向量吗? - 而且,这可能是一个愚蠢的问题,但是,实际上是否可以在不使用 return 的情况下在函数中检索值、数组、字符串?
感谢您的帮助!
如果你愿意,我可以展示我的整个代码,但它很大,可能不太清楚。
回答您的问题:
- 如果您试图循环遍历一个向量来设置它的值,那么是的,它需要被初始化。如果调用默认构造函数,则向量以 0 个元素开头。要设置大小,您可以调用
grid.resize(new_size)
,现在网格内的所有向量的大小也为零,因此您可以遍历网格并调整所有这些向量的大小... - 是的,您可以更改它的大小和 return 更大的矢量,使用
.resize
这不会影响您的原始网格,因为您传递的是它的副本而不是参考 - 是的,您可以从 void 函数中检索值,如果您创建对变量的引用作为参数,则可以修改该变量的值。您可以在这里阅读:http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
如果您不更改原始网格,通过 const 引用传递它可能是个好主意,这样您就不会制作太多副本。