将std::vector转换为数组

23

我有一个需要传入数组并填充的库。我希望使用std::vector代替数组。因此,将以下代码

int array[256];
object->getArray(array);

我想要做:

std::vector<int> array;
object->getArray(array);

但我找不到一种方法来实现这个。有没有可能使用std::vector来实现?

谢谢阅读!


编辑: 我想更新一下这个问题: 我尝试了C++11并找到了一种更好的方法。新的解决方案是使用函数std::vector.data()获取指向第一个元素的指针。 所以我们可以这样做:

std::vector<int> theVec;
object->getArray(theVec.data()); //theVec.data() will pass the pointer to the first element

如果我们想要使用固定长度的向量,最好使用新数据类型std::array(顺便说一句,出于这个原因,问题中使用的变量名"array"不应再使用!!)。

std::array<int, 10> arr; //an array of 10 integer elements
arr.assign(1); //set value '1' for every element
object->getArray(arr.data());

这两种代码变体在Visual C++ 2010中都能正常工作。请记住:这是C++11代码,因此您需要一个支持该功能的编译器!

如果不使用C++11,则下面的答案仍然有效!


1
可能是 [如何将向量转换为数组C++] 的重复问题 (https://dev59.com/m3A85IYBdhLWcg3wJf8Z) - Trilarion
1个回答

28

是的:

std::vector<int> array(256); // resize the buffer to 256 ints
object->getArray(&array[0]); // pass address of that buffer

vector中的元素是保证连续存储的,就像数组一样。


5
但请注意零大小数组。 - Yakov Galka
2
@alxx:如果重新分配了,就好像array被重新设置了一样(在它不是在堆栈上分配的情况下),那么指针现在将无效。@GMan:我建议传递大小,尽管这在原始问题中没有提到。 - Matthieu M.
10
请注意,这仅适用于 T 不等于 bool 的 std::vector<T>,因为 std::vector<bool> 是一种特殊情况,其中 8 个 bool 压缩成一个字节。 - fschmitt
我们能否在一个数组中连续获取所有数据? - Manolete
2
@Manolete:你可以获取内部向量指向其int数组的指针,也可以获取外部向量指向其vector<int>数组的指针,但是没有办法获取每个单独的int的连续数组,因为容器并不是这样定义的。那应该使用vector<int>。通常最好用单个向量替换嵌套向量,但并非总是如此。 - GManNickG
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接