【问题标题】:Accessing vectors of structs访问结构的向量
【发布时间】:2010-11-13 01:19:16
【问题描述】:

我有一个结构:

struct OutputStore 
{
    int myINT;
    string mySTRING;
}

如果我创建一个 OutputStore 类型的数组,如下所示:

OutputStore *OutputFileData = new OutputStore[100];

然后我可以解决它:

OutputFileData[5].myINT = 27;

但是如果我使用向量而不是数组:

vector<OutputStore> *OutputFileData = new vector<OutputStore>(100);

然后,如果我尝试,我会得到一个 '... is not a member of 'std::vector<_ty>' 错误:

OutputFileData[5].myINT = 27;

既然你可以通过它的索引访问一个向量,就像你可以访问一个数组一样,为什么这条线不起作用。 我只是想知道,因为这表明我缺少一些基本的理解。

(我更改为向量,因为我想 push_back 因为我不知道我的数据将达到的大小。我已经通过使用结构的构造函数并通过它推回来让它工作......我只是想了解这里发生了什么)

【问题讨论】:

    标签: c++ arrays vector struct


    【解决方案1】:

    不要创建指向向量的指针。做吧

    vector<OutputStore> OutputFileData(100);
    

    你会没事的。要使上面的代码正常工作,您需要执行以下操作

    (*OutputFileData)[5].myINT = 27;
    

    【讨论】:

    • 非常感谢,我现在明白了。
    【解决方案2】:

    因为当您将 [] 运算符应用于指针时,它将索引到该指针,而不是该对象。要获取对象,您首先需要取消对向量指针的引用。

    (*OutputFileData)[5].myINT = 27;
    //*OutputFileData is the same as OutputFileData[0]
    

    如果您想直接在向量上使用 [] 运算符,请不要将其声明为指针。

    vector<OutputStore> OutputFileData(100);
    OutputFileData[5].myINT = 27;
    

    向量只是一个类,就像 C++ 中的任何其他类一样。如果创建指向它的指针,则在取消引用它之前不会直接使用该对象。

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2010-11-25
      相关资源
      最近更新 更多