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

时间:2012-03-14 21:12:18

标签: c++ c++11

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

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

我想将其转换为 pin** pins_arr

我已尝试过这里建议的所有内容,但它不起作用

我猜它之所以无效是因为我将对象指针作为一种类型而不是基本类型。

你能帮我解决这个问题吗?我整个上午都被困住了。

谢谢,

3 个答案:

答案 0 :(得分:2)

编辑:如果你真的坚持做这样的转换,我想你可以按照这个顺序做点什么:

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的大部分目的,坦率地说我有点傻。

答案 1 :(得分:2)

成员函数data()返回数组,因此_PINS-&gt; data()应该有效...

答案 2 :(得分:1)

所以,先关闭;为什么你要使用指针向量?为什么要存储指向矢量的指针?!这规避了向量管理内存的能力,几乎肯定是错误的。让向量按照它的意图去做,它会在幕后处理动态分配和clanup。

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

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

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

using std::vector;

//...

vector<pin> pins;  // that's it!  really!