在C++中将矢量转换为数组

converting vector to array in C++

本文关键字:转换 数组 C++      更新时间:2023-10-16

我有一个关于从std::vector转换为数组的问题。我有一个指向对象的指针向量。如何在C++中将它转换为指向对象的指针数组?

矢量是std::vector<pin*> *_PINS

我想将其转换为pin** pins_arr

我已经尝试了这里建议的一切,但它不起作用

我想它不起作用的原因是,我把指向对象的指针作为类型,而不是基本类型。

你能帮我做这个吗?我被困了一上午。

谢谢你,

编辑:如果你真的坚持这样做转换,我想你可以按照这个顺序做一些事情:

std::vector<PIN *> *_PINS;
_PINS = new std::vector<PIN *>;
// make life a little easier:
std::vector<PIN *> tmp = *_PINS;
PIN *pins = new PIN *[10];
for (int i=0; i<10; i++)
    pins[i] = tmp[i];
PIN **ppins = &pins;

不过,我不得不同意Ed.S的观点——你在这里所做的事情一开始就违背了使用std::vector的大部分目的,坦率地说,这让我觉得有点傻。

成员函数data()返回数组,所以_PINS->data()应该可以工作。。。

所以,首先;你为什么要使用指针向量?为什么要存储指向向量的指针?!这绕过了向量为您管理内存的能力,几乎可以肯定是错误的。让向量做它应该做的事情,它在幕后为您处理动态分配和clanup。

向量保证它们的内存存储在连续空间中,因此第一个元素的地址可以用作指针,即数组。当你存储一个指向向量的指针时,你再次消除了它基于范围确定地清理的能力。在手动调用delete之前,析构函数不会运行。

在这里,您实质上是在使用向量作为数组。同样,这是错误的。向量本身是一个轻量级对象,没有充分的理由动态分配它。将vector&传递给需要使用它的函数。

然而,更重要的是;你做错了。只需使用这个:

using std::vector;
//...
vector<pin> pins;  // that's it!  really!