[英]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.