-1

我似乎无法管理访问向量元素的语法,向量的指针包含在结构中。MWE之后的更多内容:

#include <vector>
#include <stdio.h>

typedef struct vectag
  {
    std::vector<float> *X;
  } vec;

int main ()
  {
    vec A;
    A.X = new std::vector<float>(0);

    A.X->push_back(5.0);

    // This next line is the problem:
    float C = A.X[0];

    printf("%f\n", C);
    return 1;
  }

GCC (G++) 说

14:24: error: cannot convert ‘std::vector<float>’ to ‘float’ in initialization

当然,这是完全正确的。在行float C = A.X[0];中,如果 X 不是指针,则 BX[0] 将是正确的(回想一下,std::vector<float> *X;)。在 operator[] 之前取消引用 X 的正确语法是什么,以便我可以访问 X 的元素?

PS我知道成员函数at(),它不是我的选择因为我不想要范围检查的开销。这是性能关键代码的一部分。

4

2 回答 2

5

A.X是指针。您需要取消引用它以访问它指向的向量:

float C = (*A.X)[0];

但是如果你没有初始化A.X指向任何东西,那么取消引用它就会有未定义的行为,它看起来就像你在这个程序中一样。

于 2013-06-04T20:35:04.873 回答
3

A.X[0]尝试访问X- 指向的第一个向量,记住,它是一个指针。

operator[]在向量本身上使用,您可以使用A.X->operator[](0),尽管老实说,我看不出您的成员是指针而不是对象的原因。

您的代码表现出未定义的行为,因为X是一个未初始化的指针

vec A;
A.X->push_back(5.0);

这里。

于 2013-06-04T20:33:18.580 回答