- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 2D vector ,我试图用坐标填充它。为了我自己的缘故,我已经为坐标定义了一个结构,但出于某种原因,push_back() 函数没有将正确的 y 坐标推到 vector 上,而是只推第一个。
这是有问题的代码:其余代码对这个片段来说不太重要。
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 < row) 循环的第一次迭代,内部 for(cc < col) 循环输出正确的 x 坐标,但在 column.push_back(temp) 完成后,y 坐标就好像 cr 仍然是 0.0f 而不是 1.0f,将 -0.1f 而不是正确的 -0.3f 输出到 vector 中。这发生在 cr 的任何值上。
任何人都可以阐明这个问题吗?感谢您的帮助!
最佳答案
正如@Erik 所指出的,您打错了字。这:
for(int cc = 0; cr < col; cc++) {
应该是这样的:
for(int cc = 0; cc < col; cc++) {
此外,我认为您可能希望在外部 for 循环的每次传递时“重置”您的 column
vector 。我认为简单的方法就是移动它:
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++) {
如果您不这样做,列
vector 只会累积您向其推送的所有值。
通过这些更改,我从这个测试程序中得到了我认为“正常”的输出:
#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);
}
}
关于c++ - 尝试 push_back() 结构会导致 2D vector 中的信息不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26029884/
这个问题在这里已经有了答案: Passing by value vs const & and && overloads (3 个答案) 关闭 8 年前。 为什么push_back的函数签名如下? v
代码如下: std::vector s; s.push_back(~Dword(0)); 什么是~Dword?它是如何工作的? 最佳答案 Dword 这里是一个数字类型(可能是 DWORD 的类型别名
我正在测试 C++ 中推回对象与推回对象指针到 Vector 之间的性能差异。 我在 Stackoverflow 和其他文章中读到,您应该避免向后推指针,除非您必须这样做... 但是,我意识到推回指针
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个很大的 .txt 文件,需要加载并存储在 vector 中。该文件大小约为 5MB,500 000 行,每行约 10-20 个字符,以 '\n' 分隔。我正在使用以下示例代码对读取整个文件所需
这个问题在这里已经有了答案: What is object slicing? (18 个答案) 关闭 9 年前。 我有这两个类: class A { public: A(); vir
在我当前的代码中,我想将新的 DrawObjects 插入到我创建的 vector 中, std::vector 对象; 有什么区别: objects.push_back(DrawObject(nam
我将 Cygwin 与 GCC 一起使用,最终我想将字 rune 件读入字符 vector ,并使用此代码 #include #include #include using namespace
以下代码创建一个临时对象 A 并将其推送到一个 vector 中。 在 push_back 期间删除复制构造函数并调用移动构造函数。我不确定这段代码的设计是否正确,肯定存在内存泄漏。 #include
我知道push_back可以抛出bad_alloc异常,并且如果没有try catch block ,则调用析构函数是不正确的。如果有任何push_back抛出并且它不在try catch block
正如 Scott Meyers 所指出的(http://channel9.msdn.com/Events/GoingNative/2013/An-Effective-Cpp11-14-Sampler
我正在写一个 push_back将临时容器添加到另一个容器的函数。 并且它应该在使用 push_back 之前调整或保留容器(如果两者都可用,它应该更喜欢保留而不是调整大小) 当前代码是: names
这个问题在这里已经有了答案: Create an array when the size is a variable not a constant (2 个答案) 关闭 3 年前。 我认为我在代码中
代码: // test2.cpp #include #include struct test_class { test_class() = default; test_class(
我试图在 forloop 的 vector 中推回一个 const char*。 char_temp 是一个名为 segment 的结构,而 chars_temp 是一个结构 vector 。请参阅下
在 C++ 入门书第 (3) 章中,有以下 for 循环将 vector 中的元素重置为零。 vector ivec; //UPDATE: vector declaration for (vector
class A { public: A():a(0) {} A(int x):a(x) { coutve
我正在尝试使用 Visual Leak Detector 查找内存泄漏。它告诉我 m_neighbors.push_back(ent);导致泄漏。 (简短调用堆栈 = NeighborCalculat
我们正在制作一个包含棋盘游戏信息(名称、年份、分数)的列表。我们从 .csv 文件中扫描信息,根据该信息创建一个结构,然后将该结构添加到列表中。我们一直这样做,直到文档阅读完毕。问题是列表的 push
以下代码是将“非重叠”的 TablePath 从 vector v 移动到 vector u。我在“u.push_back(*it1);”行遇到段错误。我没有复制对象(而是只复制对象的指针)所以我相信
我是一名优秀的程序员,十分优秀!