繁体   English   中英

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

[英]Create 2D vector from 2 1D vectors

我对向量相当陌生,我正在尝试从 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];
}

我对向量相当陌生,我正在尝试从 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]。

谢谢

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

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

要创建这样的 2D 矢量:

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

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

另请注意,与 arrays 相反,我没有说明每个向量的大小,因为 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

我将从其他向量中提取的 rest 留给您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM