2016-03-06 126 views
-2

我想声明一个二维数组,像这样没有大小:我如何声明一个二维数组,并用C++声明它的大小?

int weightcalls = {{0,112}, {112,115}}; 

但节目中说,这是错误的,我必须把的大小在第一位。

+0

当你说“程序说错了”时,你是什么意思?我相信你的意思是发生了一个错误。请说出那是什么错误。并且一定要格式化您的代码。 –

回答

0

尝试使用矢量代替。

例如

#include <vector> 
using namespace std; 

int main(){ 
    vector< vector <int> > v; 
} 

然后,您可以调整矢量设置尺寸 前

v.resize(2); //This will make a 2D vector 

,然后您可以稍后调整它的大小(或只是使用“的push_back”)推回元素。

在第一个例子中的前

v[0].resize(2); 
//This will make the first "row" of the vector to have 2 empty places 
v[0].push_back(6); 
v[0].push_back(10); 
//This will push back the number 6 as the first element of the first law. 

的载体应该是这样的

0 0 
0 

是0表明空的地方,可以装满元素 ,并在第二个这样的

6 10 
0 

如果我的解释不那么详细,我很抱歉。我是新来的。 虽然希望它有帮助。我强烈建议使用载体,因为它们更加灵活。

哦,你也可能想看看这篇文章(它可能会帮助) C++ 2D vector and operations

0

正如帕诺斯说你可以声明数组作为载体。这将使您可以稍后重新调整大小并添加到阵列中。不过,如果你只是想声明数组并把它作为这样,那么我相信你可以使用:

int weightcalls[][] = {{0, 112}, {112, 115}}; 

,或者你可以声明为指针:

int ** weightcalls = {{0, 112}, {112, 115}}; 

,但如果你用它作为一个指针,那么你可能希望保持内部大小为两个,以减少以后的混淆。另外,你需要确保你完全了解指针和C++中的内存布局,以确保你不会导致内存问题(这里缺乏特殊性,因为所有内存问题一般都不好)。

你不想使用矢量的一个原因是大小和可移植性。小型系统和微控制器上的许多C++版本(即Arduino)都没有对矢量的“直接”支持。尽管有些人为这些系统提供支持,但它仍占用大量空间。

1

如果在C++中未指定数组的大小,则无法声明数组,如果您需要动态数组,则必须执行类似int myarray[2];的操作,如果在编译时不知道数组的大小,则你必须使用这样int* myarray;指针或从STL一些容器中,例如性病::矢量,至极被广泛使用并很容易使用:

#include <vector> 

int main(int argc, char* argv[]) { 

std::vector<int> myvector; 
myvector.resize(2); //Set the size of the vector to be 2 
myvector.push_back(1); 
myvector.push_back(2); 

return 0; 
} 

用C++,优选超过使用std::vector一个指针。 希望我帮助你。