访问指向对象指针向量的指针的第一个元素?

Posted

技术标签:

【中文标题】访问指向对象指针向量的指针的第一个元素?【英文标题】:Access first element of pointer to vector of object pointers? 【发布时间】:2019-09-05 22:21:55 【问题描述】:

我将一个 shared_ptr 声明为一个 shared_ptr 的向量到这样的对象......

std::shared_ptr<std::vector<std::shared_ptr<my_obj_t>>> vec =
    std::make_shared<std::vector<std::shared_ptr<my_obj_t>>>();

我的问题是我需要访问向量内部使用的数组中的第一个元素。在将其更改为对象的 shared_ptr 之前,它只是一个对象,我使用了 data()。

但是现在有了 shared_ptr 的向量,我不确定如何访问第一个元素,以便我可以向它添加偏移量并返回 my_obj_t 的指针。

我正在尝试使用类似的东西

(my_vec->data() + offset)

... 其中 func 需要一个指向 my_obj_t 数组的指针。

想法?

更新: 在我将它用作...

std::shared_ptr<std::vector<my_obj_t>> vec =
    std::make_shared<std::vector<my_obj_t>>();

我会通过

访问它
(vec->data() + offset)

【问题讨论】:

(*my_vec)[offset]-&gt;get() 似乎是最明显和最干净的。 您不能互换 "指向my_obj_t 数组的指针""指向std::shared_ptr&lt;my_obj_t&gt; 数组的指针"。它们根本不同。 如果我没看错的话就不行了。 vector 现在包含一个 std::shared_ptr&lt;my_obj_t&gt;s 数组。要获得my_obj_t 的数组,您必须进行大量复制。我同意@uneven_mark。我想你可能会穿越into X-Y territory。 @ChrisDodd - 如果你想回答,我用了你的。虽然是 (*my_vec)[offset].get() ... 而不是 ->get()。 请提供minimal reproducible example。 【参考方案1】:

获取对从offset 指向的my_obj_t 的引用

*my_vec->at(offset)

没有数组my_obj_t任何地方

【讨论】:

【参考方案2】:
std::make_shared<std::vector<std::shared_ptr<my_obj_t>>>()

这会构造一个shared_ptrs 的空向量。

我的问题是我需要访问使用的数组中的第一个元素 内部由向量。

由于向量是空的,你想象的内部数组可能还不存在。所以没有办法访问它的第一个元素。您必须先添加元素,然后再尝试使用它们。

【讨论】:

【参考方案3】:

Chris 显然没有抽出时间来回答,因为它最干净,所以我就用这个。

(*my_vec)[offset]->get()

【讨论】:

以上是关于访问指向对象指针向量的指针的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

取消引用指向访问元素的向量指针

在没有指针的情况下修改容器中的对象:向量与集合

访问指向多维向量的指针向量中的元素

为啥我指向向量第一个元素的指针会丢失?

如何从 C++ 中的“指向对象的指针”向量访问对象

向量的变化第一指针