c++中如何初始化vector二维数组_c++ vector二维数组初始化方式

老实说,在C++中理解这个二维向量确实需要花很多功夫。
它是向量中的向量。
类之间没有关系,所以它们独立工作。
我们来谈谈几种入门方法。
使用哪一种取决于具体情况。

1 .设置行和列的大小;从默认值开始。
适用条件: 例如;如果你想要一个3 行4 列的矩阵;所有值必须为0。
方法:直接这样写。
程序文件 std::vector> 矩阵(3 , std::vector(4 )); 说明:外层是3 个向量,每个向量默认包含4 个int,全部为0。
适合固定大小;例如,确保它是方阵或始终为 3 x4
2 初始化为特定值。
适用条件:仍然是3 行4 列,但是这次的值必须是5 方法: 程序文件 std::vector> 矩阵(3 , std::vector(4 , 5 )); 说明:内向量传递两个参数;第一个是列数,第二个是初始值。
适合给整个矩阵分配固定数字的情况。

3 列表初始化(C++1 1 后可用) 适用情况:数据少,大家都知道,硬编码一下就可以了。
比如实验。
方法: 程序文件 std::vector> 矩阵={{1 ,2 ,3 },{4 ,5 ,6 },{7 ,8 ,9 }}; 路线:各线写下行号和列号会自动理解。
适合静态数据。
例如,当您测试时,无需更改这些数字。

4 动态添加类。
适用条件:矩阵大小未知;或不同的行数和列数。
例如,有时有 3 行,有时有 5 行。
方法: 1 . 添加一行: 程序文件 std::vector> 矩阵; 矩阵.push_back({1 ,2 }); // 第 1 行 矩阵.push_back({3 ,4 ,5 }); // 第 2 行 2 . 首先划分并填充行: 程序文件 std::vector> 矩阵(2 ); // 第 2 行,空 矩阵[0]={1 ,2 }; // 填写第 1 行。
矩阵[1 ]={3 ,4 ,5 }; // 填写第 2 行。
注意:这两个都可以处理不规则矩阵,例如有些行长,有些行短。
适合慢数据或者你永远不知道最后会是什么样子。

如何选择?
固定大小,您想要默认值吗?选择选项 1
固定大小,默认值。
选择选项 2
数据少;想写硬代码吗?选择选项 3
勤奋,不是吗?选择选项 4
注意事项:
二维向量是向量中的向量,并且行彼此不接触。

如果知道大小,最好一开始就设置这个,否则会慢慢迭代扩大。

动态行添加灵活;但请注意,内存是连续的,并不像数组那样整齐地组织。

就是这样。
使用哪一种取决于您的情况。

c++中如何初始化二维数组_c++二维数组初始化方法

c++二维数组初始化问题

哈,这个问题,我记得去年面试的时候也遇到过类似的情况。

看看这个 Cb[][3 ]={{1 ,0,0},{2 ,3 ,0},{4 ,5 ,6 },{2 ,0,0}}。
你定义的是一个二维数组,但是第一维(行数)没有写。
编译器根据初始化元素组的数量自动推导它。
这里有 4 行。

所以你写 Cb[3 ]={{...}}。
其实也是可以的。
编译器知道你一共初始化了4 组数据,会自动帮你补上4 组。
这就是为什么可以省略第一个维度的原因。

关键在于内存的存储方式。
虽然写起来是二维的,但在内存中,却是连续的一维数组。
想一想,计算机是如何保存的呢? 它们都是从低地址到高地址,逐行或逐列,但不会分开。

想要验证吗? 如果你取地址&b[1 ][0]和&b[0][2 ],你会发现它们之间的差异是固定的! 例如,如果使用 1 6 位系统,一个 int 是 4 个字节,那么 &b[1 ][0]
&b[0][2 ] 应该正好是 8 个字节(因为 b[0][2 ] 是第 1 行第 3 列,b[1 ][0] 是第 2 行第 1 列,中间间隔一行)。
这个差异证明了内存是连续排列的。

所以你的理解是正确的。
行数是在初始化时自动推导出来的,并按行存储在内存中(虽然整体是连续的)。
这个问题的要点应该就在这里。