访问结构的向量

时间:2009-07-22 15:14:51

标签: c++ arrays vector struct

我有一个结构:

struct OutputStore 
{
    int myINT;
    string mySTRING;
}

如果我按如下方式创建OutputStore类型的数组:

OutputStore *OutputFileData = new OutputStore[100];

然后我可以用:

来解决它
OutputFileData[5].myINT = 27;

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

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

然后我得到一个'...不是'std :: vector&lt; _Ty&gt;'的成员如果我尝试错误:

OutputFileData[5].myINT = 27;

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

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

2 个答案:

答案 0 :(得分:9)

不要创建指向矢量的指针。只是做

vector<OutputStore> OutputFileData(100);

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

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

答案 1 :(得分:3)

因为当你在指针上应用[]运算符时,它将索引到该指针,而不是该对象。要访问该对象,首先需要取消引用向量指针。

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

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

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

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