Vector_push back 不填充向量(c++)

Posted

技术标签:

【中文标题】Vector_push back 不填充向量(c++)【英文标题】:Vector_push back not populating the vector (c++) 【发布时间】:2012-04-07 12:00:33 【问题描述】:

我没有收到任何错误消息,只是我的向量没有填充。查看观察列表中的向量,没有任何内容被复制。为什么是这样? 我试过两种方法。 第一个

std::vector<Point3D*>   hitpoints;
local_hit_point = sr.local_hit_point; //local_hit_point class Point3D 
hitpoints.push_back(local_hit_point);

我尝试使用指针的第二种方式

std::vector<Point3D*>   hitpoints; 
Point3D* hittingpoint_ptr = new Point3D;
local_hit_point = sr.local_hit_point;
hittingpoint_ptr = &local_hit_point;
hitpoints.push_back(hittingpoint_ptr);

我在我的代码中的其他地方找到了可以工作的向量。我真的只是愚蠢吗,但我似乎无法弄清楚为什么它不起作用。

【问题讨论】:

你怎么知道它没有填充? (请提供源代码) 如果你只有一个,你为什么要使用它? sr.local_hit_point 是否可能实际上是一个 Point3D 数组?在这种情况下,您需要遍历它们并一一添加。 你可以使用hitpoints.size()查看有多少元素。存储指针时,你确定指向的对象在原地吗? 文森特。当我调试时,我有一个“观察名单”,我可以看到没有任何东西进入生命值。你想要什么源代码? sr.local_hit_point 返回射线撞击物体的 x,y,z 笛卡尔坐标点。向量在一个“for”循环中,我想在每次通过时存储命中点。 Bo Persson,我如何测试指向的对象是否保持原位? 以第二种方式:为什么要创建新点而不是将其均衡到另一个指针..在这种情况下您将丢失该指针..顺便确保您的调试器没有错误-运作.. 【参考方案1】:

我最好的猜测是你的调试器有问题..

第一个建议;

清除监视列表中的所有内容,因为它们可以改变执行的行为 再检查一遍。。

第二个建议;

创建一个新项目并像上面那样编写一个简单的代码,看看您的向量是否正在填充。如果这个简单的项目有效,您应该向我们提供更多代码和详细信息..

【讨论】:

【参考方案2】:

只是我的向量没有填充。

它正在填充。不过

查看观察列表中的向量... 我使用了 hitpoint.size()

函数/方法调用的结果(size() 是一种方法)不会在 Visual Studio 监视列表中自动更新(因为你没有告诉你使用什么操作系统/编译器,我不得不假设它是 Visual Studio)。 IE。如果您将函数调用输入到监视列表中,它将计算结果,但在您手动刷新之前不会再次调用函数。代替函数调用,将向量本身添加到监视列表中。

【讨论】:

以上是关于Vector_push back 不填充向量(c++)的主要内容,如果未能解决你的问题,请参考以下文章

Malloc 错误:OpenCV/C++ 而 push_back 向量

带有智能指针的 C++11 向量

c ++ push_back第一个向量和按升序排序向量[关闭]

C ++擦除向量末尾的一部分而不重新分配

在指向向量的智能指针上使用 push_back() 时出现运行时错误

使用变换填充向量后,新的 c++11 for 循环不起作用