将指针分配给矢量的差异

differences in assigning pointers to vector

本文关键字:指针 分配      更新时间:2023-10-16

我是C++新手,我见过这样的代码

std::vector<Element*> *interactedElems

其中Element是一个类。 但不确定以下情况下的差异:

  1. std::vector<Element> *interactedElems
  2. std::vector<Element*> interactedElems
  3. std::vector<Element*> *interactedElems
  4. std::vector<Element*> & interactedElems

Elements 的vector

std::vector<Element> elements;

您可以向其添加Element。假设Element具有默认构造函数,则可以使用:

elements.push_back(Element());

您可以使用以下命令从elements获得第一个Element

Element e = elements[0];

指向Elements 的vector的指针

std::vector<Element>* elementsPointer;

为了将Elements添加到elementsPointer,必须指向有效的东西。

elementsPointer = new std::vector<Element>;
elementsPointer->push_back(Element());

您可以使用以下命令从elementsPointer获得第一个Element

Element e = (*elementsPointer)[0];

Element e = elementsPointer->at(0);

指向Element的指针vector

std::vector<Element*> elementPointers;

您可以将Element*添加到vector

elementPointers.push_back(new Element);

当你从这个vector获得物品时,你会得到Element*

Element* ePtr = elementPointers[0];

指向指向Element的指针vector的指针

std::vector<Element*>* elementPointersPointer;

为了向elementPointersPointer添加Element指针,必须 指向有效内容。

elementPointersPointer = new std::vector<Element*>;
elementPointersPointer->push_back(new Element);

您可以使用以下命令从elementPointersPointer获得第一个Element*

Element* ePtr = (*elementPointersPointer)[0];

Element* ePtr = elementPointersPointer->at(0);

使用引用

使用对上述任何表单的引用就像在C++中使用对任何其他类型的引用一样。

使用可以使用:

std::vector<Element> elements;
std::vector<Element>& elementsRef = elements;

或任何其他变体。

  1. 是指向 Element 对象向量的指针。

声明本身用于指向容器对象的指针。 它包含单个元素对象。

  1. 是指向元素的指针向量。

声明本身用于容器对象。 它包含指针,每个指针指向一个 Element 对象。

  1. 是指向元素的指针向量的指针。

声明本身是一个指针。 它指向一个包含更多指针的向量。 这些指针指向实际的元素对象。

  1. 是对指向元素的指针向量的引用。

这就像#3一样,只是它是对向量的引用而不是指针。 引用基本上是一个指针,你不能重新指向其他东西。