我有一个结构:
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;
由于您可以通过它的索引访问向量,就像数组一样,为什么这行不起作用。 我只是想知道,因为它表明我缺少一些基本的理解。
(因为我不知道我的数据将达到的大小,因此我更改为向量,因为我不想知道我的数据将达到的大小。我已经通过使用构造函数来构建结构并通过它推回来...只是想了解这里发生了什么)
答案 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 ++中的任何其他类一样。如果您创建指向它的指针,则在取消引用它之前,您不直接使用该对象。