作为一名Java程序员,我很难获得返回多维数组的函数。我如何在C++中对此进行编码?:
int[][] theFunction(){
int[][] var = new int[3][3];
// code
return var;
}发布于 2012-12-21 01:52:28
在C++中,最简单的方法如下所示:
std::vector<std::vector<int> > theFunction() {
std::vector<std::vector<int> > var(3, std::vector<int>(3));
// code
return var;
}您需要包含<vector>才能对其进行编译。与Java通用容器不同,C++模板容器不会产生将原语包装到对象中的成本,因此它们可以在性能和内存消耗方面保持极高的效率,同时提供更多的灵活性。
通常,您应该更喜欢C++样式的容器(std::vector、std::set、std::map和C++11中的std::array),而不是从C“继承”而来的灵活性较差的内置替代品。
发布于 2012-12-21 02:00:59
简而言之,在C中(假设你在C++中使用的方言C++是C的超集,经过一些修改),你不能从函数中返回向量或矩阵。不过,您可以返回一个指针(这可能不会对您有多大帮助)。
在C和C++中,向量的名称(让我们简化它)是指向第一个位置的指针,因此:
int v[] = { 1, 2, 3 };
int * ptr = v;指针是一个内存地址,你可以使用它来遍历所有元素(尽管它可能是危险的):
for( ; ptr < ( v + 3 ); ++ptr) {
std::cout << *ptr << stD::endl;
}并且该指针可以被返回:
int * vectorCreator(int max)
{
int * v = new int[max];
return v;
}注意,在这种情况下,调用者负责在完成后释放向量。这是一个可以用auto_ptr解决的问题(新标准已经过时了,只要编译器允许,就应该使用unique_ptr )。
auto_ptr<int> vectorCreator(int max)
{
int * v = new int[max];
return auto_ptr<int>( v );
}按照这个方向工作的是C++标准库的一部分,您可以在其中使用vector<>模板,它更安全,也更舒适。
希望这能有所帮助。
发布于 2012-12-21 01:56:29
正如其他人所说,您可以返回一个std::vector<std::vector<int> >。值得指出的是,在这种情况下,C++的值可能非常重要--特别是,只要看一下这段代码,您可能会认为在函数返回时必须复制整个向量向量(因为C++函数的返回值是按值返回的)。但是,这种优化是C++明确允许的,并且几乎可以由任何编译器实现,它允许函数以任何返回结构的形式分配向量。
https://stackoverflow.com/questions/13977737
复制相似问题