C++ 在C+上重新分配2D数组+;
假设我有:C++ 在C+上重新分配2D数组+;,c++,multidimensional-array,realloc,C++,Multidimensional Array,Realloc,假设我有: #include <iostream> using namespace std; int **a; //Global Variable int main() { n=5; a = new int*[n]; for ( int i = 0 ; i < n ; i++ ) a[i] = new int[n] ; } #包括 使用名称空间std; 国际**a//全局变量 int main() { n=5; a=新整数*[n]; 对于(int i
#include <iostream>
using namespace std;
int **a; //Global Variable
int main()
{
n=5;
a = new int*[n];
for ( int i = 0 ; i < n ; i++ )
a[i] = new int[n] ;
}
#包括
使用名称空间std;
国际**a//全局变量
int main()
{
n=5;
a=新整数*[n];
对于(int i=0;i
是否有任何realloc()方法来增加行大小?(列大小是固定的)
我的意思是,如果行的大小是5,那么我想让它变成6,而不是更多,只是+1。
我用
for(i=0;irealloc
仅在分配malloc
时有效。如果使用new
,则必须delete
,然后再次使用new
(或使用类似std::vector
的工具)
编辑:因为您询问了如何使用malloc
的示例:
a = new int*[n];
将成为
a = (int **) malloc (n * sizeof (int *));
a[i] = (int *) malloc (n * sizeof (int));
及
将成为
a = (int **) malloc (n * sizeof (int *));
a[i] = (int *) malloc (n * sizeof (int));
realloc
仅在分配malloc
时有效。如果使用new
,则必须delete
,然后再次使用new
(或仅使用类似std::vector
的工具)
编辑:因为您询问了如何使用malloc
的示例:
a = new int*[n];
将成为
a = (int **) malloc (n * sizeof (int *));
a[i] = (int *) malloc (n * sizeof (int));
及
将成为
a = (int **) malloc (n * sizeof (int *));
a[i] = (int *) malloc (n * sizeof (int));
您可以编写自己的例程来调整数组的大小
如果需要大小为N的已调整大小的块
分配(新)新的大小N
将旧阵列/块复制到此新分配的阵列/块
释放旧数组(删除)
为了避免一次又一次地调用此例程,最好预先分配一个大的块,块的大小将由应用程序的需要决定,并且应该避免多次调整数组的大小。您可以编写自己的例程来调整数组的大小
如果需要大小为N的已调整大小的块
分配(新)新的大小N
将旧阵列/块复制到此新分配的阵列/块
释放旧数组(删除)
为了避免一次又一次地调用此例程,最好预先分配一个大数据块,数据块的大小将由应用程序的需要决定,并且应该避免多次调整数组的大小。答案是否!
C++内存管理不包含重新分配/调整已分配内存大小的功能。您必须使用new/copy/delete语义自己实现这一功能答案是否!
C++内存管理不包含重新分配/调整已分配内存大小的功能。您必须使用new/copy/delete语义自己实现这一功能“因为我需要作为全局数组的数组”。它与任何东西有什么关系?错误之处在于(Konrad Rudolph的幻灯片).std::vector
对象也可以是全局对象。@daknok\u\t你建议我不要使用指针,但数组的列大小将从键盘输入。因此我必须对a=new int
进行编码。如果你知道任何定义无大小向量对象的方法,请告诉我:)@谁在乎你想要什么。示例:std::vector a;int main(){…a.reserve(n);…}
@daknok\u你能给我更多的信息吗?对于ex,1)我如何定义像a.reserve(m,n)这样的二维空间?2) 如何添加新的“行”而不是列,列大小将是从键盘输入的变量,永远不会更改。只需添加一行。“因为我需要我的数组作为全局数组。”它与任何事情有什么关系?错的是(康拉德·鲁道夫的幻灯片)std::vector
对象也可以是全局对象。@daknok_\t你建议我不要使用指针,但数组的列大小将从键盘输入。所以我必须编码a=newint
东西。如果你知道任何定义矢量对象无尺寸的方法,请告诉我:)@谁在乎你想要什么。示例:std::vector a;int main(){…a.reserve(n);…}
@daknok\u你能给我更多的信息吗?对于ex,1)我如何定义像a.reserve(m,n)这样的二维空间?2) 如何添加新的“行”而不是列,列大小将是从键盘输入的变量,永远不会更改。Jut添加一行。那么如何使用malloc定义数组?你能给我举个二维的例子吗?我做了a=(int**)malloc(0*sizeof(int))然后在for循环中a[i]=(int*)malloc(0*sizeof(int))代码>。但它仍然是一样的。。。它只运行一次realloc命令。然后分段错误…realloc()仍然不起作用。实际上我很困惑<代码>a[i]=(int*)realloc(a[i],计数器*sizeof(int))代码>这是在0到nso的for循环中,如何使用malloc定义数组?你能给我举个二维的例子吗?我做了a=(int**)malloc(0*sizeof(int))然后在for循环中a[i]=(int*)malloc(0*sizeof(int))代码>。但它仍然是一样的。。。它只运行一次realloc命令。然后分段错误…realloc()仍然不起作用。实际上我很困惑<代码>a[i]=(int*)realloc(a[i],计数器*sizeof(int))代码>这是一个for循环,实际上,向量的保留
在功能上与realloc
无法区分,尽管是在更高的级别上。这不是真的-保留不会像realloc那样释放未使用(但已分配)的内存。但考虑到所有STL容器都会动态调整大小,您是对的。编辑了我的帖子。这就是为什么我说“在更高的层次上”reserve
确保保留大内存块,以便push_back
无需将内存移动到其他分配块即可访问它。因此,实际上,push_back
(不是reserve
)的行为类似于realloc
。实际上,向量的reserve
在功能上与realloc
是无法区分的,尽管在更高的级别上。这不是真的-reserve不会像realloc那样释放未使用(但已分配)的内存。但考虑到所有STL容器都会动态调整大小,您是对的。编辑