【问题标题】:How to Convert a (vector of pointers) --> (Pointer to an array of pointers)如何转换(指针向量)->(指向指针数组的指针)
【发布时间】:2012-11-01 17:28:27
【问题描述】:

我明白“How to convert vector to array in C++

回答如何将双精度向量(非指针类型)转换为数组。

我的要求 :: 将(CustomClass 指针向量)转换为(CustomClass 指针指向 CustomClass 指针数组)。

以下代码是否表示“(指针向量)-->(指向 CustomClass 指针数组的指针)”

std::vector <CustomClass*> vectorObject(SizeOfVector);  // Here each element of the vector //is a pointer to CustomClass object.
CustomClass* customClassArray = &vectorObject[0];

如果我错了,请纠正我。请提供代码 sn-p 的帮助。

提前致谢。

【问题讨论】:

    标签: c++ arrays pointers vector


    【解决方案1】:

    Vector 是数组排序中的包装器,它提供数组的所有功能,同时还允许数组缩小,知道它有多大以及许多其他有用的功能。 std vector 的要求之一是它的数据像数组一样以连续的方式存储。由于这个要求,您可以通过获取第一个元素的地址来获取元素数组,而不管类型如何。

    std::vector &lt;CustomClass*&gt;vectorObject表示你有一个CustomClass Pointers的向量来获取一个数组

    CustomClass **Array = &amp;vectorObject[0] 现在我在向量中的偏移量 0 处获取了连续的数据段,并为其分配了 customclass 的指针指针,记住数组和指针在 c 和 c++ 中紧密相连我现在可以访问指针指针,就好像这是一个数组

    CustomClass * FirstEle = Array[0];

    【讨论】:

    • 谢谢。您的解释非常不言自明! :)
    【解决方案2】:

    是的,向量必须在内存中连续,因此表达式“&vectorObject[0]”将返回第一个元素的地址,您可以指向该地址。

    【讨论】:

      【解决方案3】:

      实际上vectorObject[0]CustomClass *,所以&amp;vectorObject[0]CustomClass **

      您在这里做了一个有趣的假设,vector&lt;&gt; 按顺序存储其元素。你可能是对的,所以你的代码应该可以工作。

      编辑:根据 Ben Voigt 的 cmets,vector&lt;&gt; 的连续性由标准保证,因此此方法将 100% 有效。

      【讨论】:

      • +1 表示第一次观察。最后一句话是错误的,但没有“可能”。 std::vector需要使用顺序存储,以启用与接受指针的旧 API 的互操作。
      • @BenVoigt,不是说你错了,直觉上这是有道理的,但我在sgi.com/tech/stl/Vector.html 看不到它的要求。我能看到的最接近的是元素以严格的线性顺序排列的顺序要求,但这还不够强。
      • @BenVoigt,事实上在sgi.com/tech/stl/complexity.html 上它明确声明您可以使用list&lt;&gt; 实现vector&lt;&gt;,抛开性能影响。
      • 阅读链接的问题。另请注意,我写了关于std::vector 的文章,它与 SGI STL 中的矢量收集模板相似但不完全相同。 SGI 文档不是权威参考,C++ 标准才是。
      • 我也读到了,这是针对 C++11 的提议,据我所知不是当前标准的一部分。
      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多