我需要从文件中读取一些内容。 第一个int表示我将在该行中有多少个整数。
示例:
5 1 4 7 10 2
4 5 6 7 1
3 1 0 8
3 4 5 6
4 1 2 3 4
有没有办法创建这样的矩阵?
我看到有一种做类似事情的方法,但不是矩阵: Is it possible to make a matrix with rows that have different #rows on Matlab?
答案 0 :(得分:4)
你想要一个锯齿状边缘矩阵。
在数学建模中,这通常是最不受欢迎的事情,但在您的特定案例中,
std::vector<std::vector<int>>
将完美地模拟这一点。请注意int
的属性因平台而异。 int
可以采用的最小范围是-32767到+ 32767.考虑使用long
&amp; c。如果有必要的话。
答案 1 :(得分:2)
在C ++中不可能有具有不同行大小的二维数组(如果这是矩阵的意思)。 您可以使用一些C ++ std库容器或一些解决方法来克服此限制。一些选项是:
std::vector
或其他容器的数组。或std::vector
,std::array
或std::vector
的其他容器。 (例如:std::vector< std::vector< T > >
)在所有上述方法中,行的数据不是连续的。要使数据连续(如果需要),您可以创建一个自己的类,它创建一个大的1-d数组并将其模拟为2-d数组。
答案 2 :(得分:0)
矩阵的定义是矩形的。所以,你所描述的不是一个矩阵。这是一个锯齿状的阵列。
您不能拥有子阵列大小不同的数组数组。数组的所有元素必须具有相同的类型。但是你可以有一个指针数组,它可以指向任何大小的数组。最简单的解决方案是使用std::vector
:
std::vector<std::vector<int>> vec_of_vecs;
这实际上是表示二维数组结构(锯齿状或非锯齿状)的最简单方法,尽管内存表示并不像您对非锯齿状2D数组所期望的那样连续。
为了提高性能,也可以将数组存储在单个内存块中,但这样会复杂得多。你可以做的是分配一个包含所有行的内存块,另一个数组来存储指向每行开头的指针。
答案 3 :(得分:0)
可以使用std::vector<std::vector<int> >
类型的元素创建std::vector
即std::vector<int>
。
个人std::vector<int>
可以有不同的大小。