我有一个2D矢量,我试图填充坐标。我为自己的缘故定义了一个坐标结构,但由于某种原因,push_back()函数没有将正确的y坐标推到矢量上,而是仅推送第一个。
以下是相关代码:其余代码对此代码段并不重要。
struct coor2d {
float x;
float y;
};
// Inside a function
int row = 5;
int col = 5;
float r_wide = 1.0/float(row);
float r_high = 1.0/float(col);
vector<vector<coor2d> > grid;
vector<coor2d> column;
for(int cr = 0; cr < row; cr++) {
for(int cc = 0; cr < col; cc++) {
coor2d temp;
temp.x = (float(cc) * r_wide) + (r_wide/2.0);
temp.y = ((float(cr) * r_high) + (r_high/2.0) * -1.0);
// Here the temp.y value is correct
column.push_back(temp);
// Here the temp.y value is incorrect
}
grid.push_back(column);
}
其余代码依赖于此工作正常。我假设我失去了精确度,或者在这里打错了。我知道我可以为coor2d做一个构造函数,但我不认为这会解决这个问题;但是,我可能是错的。
显示问题的一个例子:
一旦通过for(cr&lt; row)循环的第一次迭代,内部for(cc&lt; col)循环输出正确的x坐标,但是在column.push_back(temp)完成之后,y -coordinate就好像cr仍然是0.0f而不是1.0f,将-0.1f输出到向量而不是正确的-0.3f。这发生在cr的任何值上。
有人能解释一下这个问题吗?谢谢你的帮助!
答案 0 :(得分:1)
正如@Erik指出的,你有一个错字。这样:
for(int cc = 0; cr < col; cc++) {
应该是这样的:
for(int cc = 0; cc < col; cc++) {
另外,我想你可能想要&#34;重置&#34;外部for循环的每次传递都是column
向量。我认为简单的方法就是移动它:
vector<vector<coor2d> > grid;
for(int cr = 0; cr < row; cr++) {
vector<coor2d> column; // move the column vector to here
for(int cc = 0; cr < col; cc++) {
如果你不这样做,column
向量只会累积你推送到它上面的所有值。
随着这些变化,我得到了我认为的理智#34;理智&#34;该测试程序的输出:
#include <iostream>
#include <vector>
struct coor2d {
float x;
float y;
};
int main(){
// Inside a function
int row = 5;
int col = 5;
float r_wide = 1.0/float(row);
float r_high = 1.0/float(col);
for(int cr = 0; cr < row; cr++) {
std::vector<coor2d> column;
for(int cc = 0; cc < col; cc++) {
coor2d temp;
temp.x = (float(cc) * r_wide) + (r_wide/2.0);
temp.y = ((float(cr) * r_high) + (r_high/2.0) * -1.0);
// Here the temp.y value is correct
column.push_back(temp);
// Here the temp.y value is incorrect
std::cout << "temp.x: " << temp.x << " temp.y: " << temp.y << std::endl;
std::cout << "vec.x: " << column[cc].x << " vec.y: " << column[cc].y << std::endl;
}
grid.push_back(column);
}
}