没有声明的C++多维指针数组
C++ multi dimensional array of pointers without declaration
我想声明多维(在这种情况下是二维的)数组。我无法声明全局数组的大小。有了一维,一切都可以工作:
#include <iostream>
#include <fstream>
using namespace std;
int N, M;
bool *table;
int main()
{
ifstream in ("in.txt");
in >> N >> M;
table = new bool[N];
return 0;
}
但如果我想声明二维数组,我会得到一个错误:'M'不能出现在常量表达式中
#include <iostream>
#include <fstream>
using namespace std;
int N, M;
bool **table;
int main()
{
ifstream in ("in.txt");
in >> N >> M;
table = new bool[N][M];
return 0;
}
除了在主函数中声明数字而不是N和M、创建向量数组或声明表之外,我的选项是什么?
除了在主函数中声明数字而不是N和M、创建向量数组或声明表之外,我的选择是什么?
为N
指针分配内存
对于每个指针,为bool
类型的M
元素分配内存。
table = new bool*[N];
for (int i = 0; i < N; ++i )
{
table[i] = new bool[M];
}
当需要解除分配时,使用:
for (int i = 0; i < N; ++i )
{
delete [] table[i];
}
delete [] table;
使用std::vector
可以避免内存分配和释放的所有麻烦。
std::vector<std::vector<bool>> table(N, std::vector<bool>(M));
使用旧的方法:分配一个一维数组,然后通过计算(i*N+j)通过唯一索引访问它。如果你想隐藏它,创建一个有两个参数的函数。
如果你想避免真正的多级阵列的所有麻烦,你可以:
int N=2, M=3;
bool *table = new bool[N*M];
// to access the element at (n,m):
ele = table[n*M + m];
这使得所有的分配/解除分配都非常简单,只需在访问元素时多键入一点即可。当然,你可以用一个宏来解决这个问题。
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空