Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;具有可变大小行的二维数组_C++_Arrays_Vector_Multidimensional Array_Jagged Arrays - Fatal编程技术网

C++ C++;具有可变大小行的二维数组

C++ C++;具有可变大小行的二维数组,c++,arrays,vector,multidimensional-array,jagged-arrays,C++,Arrays,Vector,Multidimensional Array,Jagged Arrays,如何创建一个2D数组,比如说,arr[][],它有5行,每行中的列数可变 可能arr[5][] 第1行arr[0][]有4列 第二行arr[1][]有5列,依此类推 我不介意STL向量解决方案,但我还不太了解向量。所以,2D数组是std::vector,其中t是类型。另外,mbstd::array。或者编写自己的数组类。使用C++11,您可以轻松地使用向量(为可读性添加了换行符): 并使用数组[X][Y]访问元素。但是,向量解决方案总体上要好得多 您可以这样做(假设一个int元素数组): 但是,

如何创建一个2D数组,比如说,
arr[][]
,它有5行,每行中的列数可变

可能
arr[5][]
第1行
arr[0][]
有4列

第二行
arr[1][]
有5列,依此类推


我不介意STL向量解决方案,但我还不太了解向量。

所以,2D数组是
std::vector
,其中
t
是类型。另外,mb
std::array
。或者编写自己的数组类。

使用C++11,您可以轻松地使用向量(为可读性添加了换行符):

并使用
数组[X][Y]
访问元素。但是,向量解决方案总体上要好得多

您可以这样做(假设一个
int
元素数组):


但是,我建议使用
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
}
#包括
#包括
int main()
{
int test1[]={1,2,3};
int test2[]={4,5};
int*test[]={test1,test2};

STD:我不会投票给你,但是我会指出你的目标是他所用的语言不同。你的编辑使它稍微好一点。@ WUG:C++ 11是C++编程语言的官方标准,它不是一种不同的语言。@左撇子:这是人们可以并且会争论的技术之一。几乎与C++不同的是C++。大多数C++编译器都不支持它。我的评论的要点是,他提供了一个ASK可能没有用的解决方案。@ WUG,这不是一个技术性的,标准明确地说(1.1 - [范围])。这个代码标准规定了C++编程语言的实现要求。第一个要求是,它实现了语言,因此这个国际标准也定义了C++。<代码>。但是,我不想争论这个问题。我试图提供一个完整的答案,虽然这需要一些时间。有时会发生一个编辑,有时人们不考虑一些事情,稍后必须编辑一个答案来包含额外的信息。一维的可变大小的数组被称为锯齿形数组。还有很多其他的帖子。它们在某些方面很好。我建议熟悉你的SEL。不过f是向量。
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. 
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;
int** arr = new int*[5];
for(size_t i = 0; i < 5; ++i)
{
    arr[i] = new int[4];
}
for(size_t i = 0; i < 5; ++i)
{
    delete[] arr[i];
}
delete[] arr;
#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
}