具有可变大小行的C++二维数组
C++ 2 dimensional array with variable size rows
如何创建一个2D数组,例如arr[][]
,其中有5行,并且每行中有可变数量的列?
可能是arr[5][]
具有4列的第一行arr[0][]
具有5列的第二行arr[1][]
,依此类推?
我不介意STL矢量解决方案,但我还不太了解矢量。
使用C++11,您可以轻松地使用矢量(为可读性添加换行符):
std::vector< std::vector <int > > arr = {
{1,2,3},
{4,5},
{6,7,8,9,0}
};
如果你没有C++11编译器,它的工作方式完全相同,但你将无法轻松初始化它们。您可以单独设置元素:
std::vector< std::vector <int > > arr;//vector of vectors. Think of each element as of a "row"
std::vector<int> sub;//a temporary "row"
sub.push_back(1);
sub.push_back(2);
arr.push_back(sub);//Adding a "row" to the vector
sub.clear();//Making another one
sub.push_back(1);
sub.push_back(12);
sub.push_back(54);
arr.push_back(sub);//Adding another "row" to the vector
或者,您可以用一个普通数组初始化每个"行":
std::vector< std::vector <int > > arr;
static const int arr[] = {1,2,3,4};//A "row" as an ordinary array
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) ); //Setting a "Row" as a vector
arr.push_back(vec);//Adding the "row" to the vector of vectors.
使用普通数组不可能完全实现您想要的操作,因为当您生成array[X][Y]
时,它自动成为X*Y
矩阵。然而,您可以使用一个指针数组:
int * array[3];
//also possible: int ** array = new int*[3]; but don't forget to delete it afterwards.
int sub1[3] = {1,2,3};
int sub2[2] = {1,2};
int sub3[4] = {1,2,3,4};
array[0] = sub1;
array[1] = sub2;
array[2] = sub3;
以及具有CCD_ 7的接入元件。然而,矢量解决方案总体上要好得多。
您可以这样做(假设int
元素的数组):
int** arr = new int*[5];
for(size_t i = 0; i < 5; ++i)
{
arr[i] = new int[4];
}
这将为您提供一个5乘4的二维动态分配数组。然后您可以这样使用它:arr[i][j] = 15;
不要忘记在使用完数组后取消分配内存:
for(size_t i = 0; i < 5; ++i)
{
delete[] arr[i];
}
delete[] arr;
不过,我建议使用std::vector
。您可以查看其他答案以供参考。
不同行大小的方法
#include <iostream>
#include <string>
int main()
{
int test1[]={1,2,3};
int test2[]={4,5};
int *test[]={test1,test2};
std::cout << test[0][1];//2
std::cout << test[1][1];//5
}
因此,2D数组是std::vector<std::vector<T>>
,其中T
是类型。此外,mb std::array<std::vector<int>, 5>
。或者编写自己的数组类。
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 创建 std::string 的二维数组的最佳做法
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 元素在二维数组 c++ 中的出现次数
- 执行 c++ 二维数组
- C++ 中的二维数组初始化为一个值
- 在C++中初始化第一维大小未知的二维数组
- 如何在二维数组中存储值?