你怎么能建立一个二维数组,比如说, arr[][]
与5行,每行具有可变数量在它的列?
可能arr[5][]
与第一行arr[0][]
具有4列
第二行arr[1][]
具有5列等?
我不介意一个STL向量解决方案,但我不知道向量很好呢。
你怎么能建立一个二维数组,比如说, arr[][]
与5行,每行具有可变数量在它的列?
可能arr[5][]
与第一行arr[0][]
具有4列
第二行arr[1][]
具有5列等?
我不介意一个STL向量解决方案,但我不知道向量很好呢。
随着C ++ 11,你可以用向量很容易做到这一点(线增加了可读性breakes):
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]
它automaticaly是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;
并与接入元件array[X][Y]
但是,向量的解决方案是更好的整体。
你可以像下面这样做(假设数组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
}
这样,二维数组是std::vector<std::vector<T>>
,其中T
是类型。 另外,MB std::array<std::vector<int>, 5>
或者写自己的数组类。