从 2 个 1D 矢量创建 2D 矢量

Create 2D vector from 2 1D vectors

本文关键字:创建 2D 矢量 1D      更新时间:2023-10-16

我对向量相当陌生,我正在尝试从 2 个 1D 向量中填充坐标点的 2D 向量。我有 2 个这样的向量,其中 source_x 和 source_y 包含文件中的值:

std::vector<float,T<float>> pos_x(5); 
std::vector<float,T<float>> pos_y(5); 
for (int i = 0; i < 5 ; i++){
pos_x[i] = i+1; //{1,2,3,4,5}
}
for (int i = 0; i < num ; i++){
pos_y[i] = i+1 ; //{1,2,3,4,5}
} 

我像这样创建了我的 2D 矢量:

std::vector<std::vector<float, T<float>>> position; 
for (int i = 0; i < num ; i++){
for (int j = 0; j < num ; i++){
//Output expected: {{1,2,3,4,5},{1,2,3,4,5}}
position[i][j] = //I'm confuse here 
}
}

我不确定如何填充pos_x定位[i]和pos_y定位[J].

谢谢

所以我的猜测是这样的

std::vector<std::vector<float>> position(num, std::vector<float>(2)); 
for (int i = 0; i < num ; i++){
position[i][0] = pos_x[i];
position[i][1] = pos_y[i];
}

但我很容易错。

根据问题中的示例进行更新,我现在认为这是正确的代码

std::vector<std::vector<float>> position(2, std::vector<float>(num)); 
for (int i = 0; i < num ; i++){
position[0][i] = pos_x[i];
position[1][i] = pos_y[i];
}

没有 2D 矢量这样的东西。事实是,您可以创建一个包含向量的向量。第一个向量用作收集的向量中的索引。

请注意,此概念类似于 2D 数组:arr[3][4]表示 3 个索引,每个索引指向 4 个数据。

要创建此类 2D 矢量,请执行以下操作:

std::vector< std::vector <float>> positions.

请注意,我没有使用第二个参数(如std::vector<float, SomeAllocator>,因为我们不需要这个自定义内存分配器。

另请注意,与数组相反,我没有告诉每个向量的大小,因为 std::vector 会处理它。

让我们填充它。

"主"向量包含向量。因此,这些次要向量可以在存储在"主"向量之前创建。

std::vector<float> v1; //secondary
positions.push_back(v1); //add it to main vector

在辅助中放置一些值:

v1.push_back(7.5);
v1.push_back(-3.1);

另一种方法是通过主向量访问。如果我们新这个主向量在其第一个索引中包含v1

positions[0].push_back(8.); // same as v1.push_back(8.) if positions[0] refers to v1

或者更好地使用"at":positions.at(0).push_back(8.);

更改一些值:

v1.at(1) = 66.88;

positions[0].at(1) = 66.88;

您也可以执行v1[1] = 66.88但更喜欢at()方法,因为它将检查向量 v1 的大小是否允许索引"1"。

您可以创建并添加另一个辅助向量:

std::vector<float> v2; //secondary
positions.push_back(v2); //add it to main vector

并像以前的v1一样使用它.现在,positions[1]指的是v2

我把从其他向量拉动的其余部分留给你。