难以访问对向量中的值
Trouble accessing value in a vector of pairs
我有一个对向量作为对象内部的字段。所述对象有一个方法,我需要在其中访问向量中成对的值。我正在使用迭代器指向我希望访问的向量中的位置。以下是包含向量的代码片段:
在头文件中:
vector<pair<double, double> > points;
vector<pair<double, double> >::iterator headingTo;
在构造函数中:
points.push_back(make_pair(1700.00, 3300.00));//Plus 20 or so other values
headingTo = points.begin();
在方法中:
double x = headingTo->first - positionX;
double y = headingTo->second - positionY;
但是,当我运行此代码时,未创建 y。当我使用断点查看变量时,它根本不显示在Visual Studio中。但是,如果我交换线条,y 是可访问的,x 不是。 有什么想法吗?
编辑:我发现了以下作品:
double headingToX = headingTo->first;
headingToX -= positionX;
double headingToY = headingTo->second;
headingToY-= positionY;
检查您是否没有调试程序的优化版本 - 在这种情况下,如果编译器可以确定不需要变量生成程序所需的输出,则可以自由地删除变量。
但是,即使您使用的是未优化的构建,如果您根本不使用该变量,也可能发生这种行为。在 VC++ 2010 Express 版本的此错误报告中,您将看到Microsoft代表的以下评论(着重号已添加):
此问题是否仅发生在您未在任何变量中使用的变量上 除了赋值之外的方式?变量在 .pdb通过十六进制编辑器进行检查,或查看相应的"mov" 反汇编中的指令不保证编译器 没有进行某种级别的优化,以防止调试器 检查变量(编译器总是进行小的优化 即使在调试版本中)。调试器只能保证访问 如果变量用于 用于分配值以外的其他目的的应用程序。
如果您有正在使用变量的重现(除了 分配了一个值),并且您无法在调试器中检查它,请让 我们知道。否则,这是编译器优化的工件。
从您发布的代码中不清楚您以后是否使用 y
的值。
它与优化有关。由于您没有使用分配给的变量,因此编译器选择不创建它们(在本例中为其中一个)。当你使用它们的那一刻(在你的工作示例中,你从每个例子中减去一个值),编译器就无法再优化它们了。
我在其他编译器中看到过这种行为,并且总是通过虚拟使用消失的变量来解决它。
- 尝试通过多个向量访问变量时,向量下标超出范围
- C++从另一个类访问公共静态向量的正确方法是什么
- 访问存储在向量C++中的结构的多态成员
- 如何从静态向量访问类元素?
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 从父类的向量访问子类函数,而无需向下转换
- 如何使用常数向量访问成员函数
- 如何从C 向量访问单个单词
- 从C++中传递给函数的指针向量访问矩阵
- 多向量访问与本地对象
- C 迭代器与用于向量访问的指针
- 从向量访问成员功能
- 如何在 c++ 中从 "pointer-to-objects" 向量访问对象
- 如何从双精度向量的向量访问数据
- 从指针向量访问成员函数?C++
- 如何使用SWIG Python从内部向量访问c ++对象方法
- 无法从向量访问对象的getter
- 从向量访问某些类函数C++的问题
- 从基类类型的向量访问派生类方法
- 从对象指针向量访问对象