将1D矢量作为行推入2D矢量阵列
Push_back 1D Vector as Row into 2D Vector Array
我试图定义一个"行"或1D向量的值,然后将该行推回到2D向量中。我尝试了几种不同的方法,它们不会出错,但似乎也不起作用。以下代码:
#include <vector>
#include <iostream>
using std::vector;
#define HEIGHT 5
#define WIDTH 3
// 2D VECTOR ARRAY EXAMPLE
int main() {
vector<vector<double> > array2D;
vector<double> currentRow;
// Set up sizes. (HEIGHT x WIDTH)
// 2D resize
array2D.resize(HEIGHT);
for (int i = 0; i < HEIGHT; ++i)
{
array2D[i].resize(WIDTH);
}
// Try putting some values in
array2D[1][2] = 6.0; // this works
array2D[2].push_back(45); // this value doesn't appear in vector output. Why?
// 1D resize
currentRow.resize(3);
// Insert values into row
currentRow[0] = 1;
currentRow[1] = 12.76;
currentRow[2] = 3;
// Push row into 2D array
array2D.push_back(currentRow); // this row doesn't appear in value output. Why?
// Output all values
for (int i = 0; i < HEIGHT; ++i)
{
for (int j = 0; j < WIDTH; ++j)
{
std::cout << array2D[i][j] << 't';
}
std::cout << std::endl;
}
return 0;
}
当您push_back currentRow时,array2D已经包含HEIGHT行,在push_back之后,它将包含HEIGHT+1行。您只是不显示添加的最后一行,只显示HEIGHT的前几行。
push_back()
将一个项附加到向量的末尾。如果矢量包含WIDTH
项,则它在push_back()
之后包含WIDTH+1
项。
打印矢量的内容时,即使矢量包含更多内容,也只打印第一个WIDTH
项目,因此看不到其他项目。
您可以使用size()
方法找出向量中有多少项。
当您实际想要使用reserve
方法时,您正在使用resize
。问题是,调整大小确实会改变向量的内容,而保留只是改变存储容量。因此,如果你将向量的大小调整为N个元素,然后将一些元素推到其中,它们将被推到N、N+1等位置,而如果你只保留N个元素的大小,它们将在0、1等位置被推,这似乎是你想要的。
相关文章:
- 库特<<恩德尔;不适用于打印 2D 阵列
- 具有可变尺寸的 C++ 2D 阵列
- 如何遍历 2D 阵列?
- 超级对撞机2D阵列:生成嵌套:包装/尺寸问题
- 动态 2D 阵列.为什么分段错误?
- 尝试使用2D阵列
- 分配给阵列时出现分段错误?黑客排名 2D 阵列 - DS.
- 如何将1D阵列访问为2D阵列
- 分配/访问2d阵列,使得2d子块是连续的
- 重新分配2D阵列并删除旧阵列
- 不使用新的动态2D阵列
- 我正在为2D阵列参数而挣扎
- 特征和巨大的密集 2D 阵列
- 使用 std::transform 在 2d C 阵列上转换为 1d C 数组
- 解除分配此特定 2D 阵列的内存
- 使用两个不同大小的一维阵列制作 2D 阵列
- 返回C 中2D阵列的对角线元素总和
- 2D阵列让我卡住了
- 用pybind11铸造2D阵列
- 我的 2D 阵列无法读取文本文件并正确输出