具有可变尺寸的 C++ 2D 阵列
2D array in C++ with variable dimentions
所以我在自学C++,我对数组有疑问。我知道如果我声明一个 2D 数组,例如:
char board[8][8];
我创建了一个高度和宽度为 8 的 2D 数组。但是,我想知道是否有办法将这些维度设置为变量,以便用户可以输入他们想要的高度和宽度,我在C++尝试过这个,视觉工作室并不满意。
int rowSize = 0;
int colSize = 0;
cin >> rowSize >> colSize;
char board[rowSize][colSize];
谁能帮我?
由于这被标记为c++
,也许std::vector
适合您。它很像一个数组,但更方便,非常适合此目的。您可以使用此初始值设定项调用简单地初始化嵌套向量的 2D 数组(感谢 Bob__ 提供这个更简单的解决方案(:
int n = 5;
int m = 10;
std::vector<std::vector<char>> board (n, std::vector<char>(m, 'a'));
这将创建板并初始化所有字段以'a'
,每个示例。您可以使用与 C 样式数组相同的语法访问和操作数据:
char x = board[4][2];
board[3][3] = 'o';
最后但并非最不重要的一点是,有许多方便的特性和功能允许您比使用 C 样式数组更轻松地执行复制它之类的操作。在此处查看std::string
的文档。
如果要分配此类矩阵,请使用向量并使用i + j * rowSize
对其进行索引。
另一种结构不符合 c++,它是 C99(可变长度数组(的 gcc 扩展,它们的等价物(或多或少(是向量或指向数组的唯一指针。
如果你真的想这样做,你可以做以下事情:
int* myPointer = nullptr; // Pointer to int, initialize to nothing.
int sizeOfArray; // Size needed for array
std::cin >> sizeOfArray; // At runtime get the size of the array
myPointer = new int[sizeOfArray]; // Allocate array of specified size and save ptr in a.
for (int i = 0; i < sizeOfArray; i++) {
myPointer[i] = 0; // Initialize all elements to zero.
}
delete[] myPointer; // When done, free memory pointed to by myPointer.
myPointer = nullptr; // Clear a to prevent using invalid memory reference.
尽管我强烈建议您使用矢量。
不,您不能在一致性C++中,因为标准没有定义可变长度数组 (*(。
如果不需要连续分配(真正的 2D 数组底层存储(,则可以使用向量向量。这通常是最简单和最惯用的方式:
std::vector<std::vector<char>>(8, std::vector<char>(8, ' '));
如果可以接受函数类型访问,则可以使用大小为 64 (8*8( 的基础 1D 向量和返回引用的访问器方法生成自定义容器。
如果你想用底层的真正2D数组来模仿2D容器,那么你就有麻烦了。我尝试构建一个通用的多维容器(代码审查中的代码(,并意识到您无法在非标准容器上正确实现随机访问迭代器......
(*( 当然,GCC 很乐意接受 VLA 在 C++ 作为该语言的书面扩展......
- 2D数组来自文本输入,中间有空格
- 将值指定给向量(2D)的向量中的某个位置
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 四边形的 2D 旋转
- 打印第二列时的2d字符矢量打印空间
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- opengl glBegin(GL_LINES) 和 glBegin(GL_POINT) 在 2D 中不可视化点矢量
- 在C++中迭代 2D 容器的最干净方法
- 如何引用 2D 指针?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- C++动态安全 2D 交错阵列
- 如何在C++或OpenCV子矩阵中的2D子向量上使用OpenACC?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 将 2D 推力::d evice_vector 复矩阵传递给 CUDA 内核函数