将std :: vector转换为数组

Sid*_*ect 21 c++ stl vector

我有一个库,需要一个数组并填充它.我想使用std :: vector而不是使用数组.而不是

int array[256];
object->getArray(array);
Run Code Online (Sandbox Code Playgroud)

我想要做:

std::vector<int> array;
object->getArray(array);
Run Code Online (Sandbox Code Playgroud)

但我找不到办法做到这一点.有没有机会使用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
Run Code Online (Sandbox Code Playgroud)

如果我们想要使用具有固定数量元素的向量,我们最好使用新数据类型std :: array(btw,因此不应再使用上面问题中使用的变量名"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());
Run Code Online (Sandbox Code Playgroud)

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

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

GMa*_*ckG 26

是:

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

a vector中的元素保证是连续的,就像数组一样.

  • 请注意,这仅适用于带有T!= bool的std :: vector <T>,因为std :: vector <bool>是一种特殊情况,其中8个bool被压缩为一个字节. (9认同)
  • 但要注意零大小的数组. (5认同)
  • @alxx:如果重新分配,就好像`array`被重置一样(如果它没有在堆栈上分配),那么指针现在将无效.@GMan:我建议传递大小,即使原始问题中没有. (2认同)
  • @Manolete:你可以得到内部向量指向它的int数组的指针,你可以得到外部向量指向它的数组`vector <int>`的指针,但是没有办法得到每个单独的连续数组. int`,因为那不是容器所说的.那将是`vector <int>`.*通常*最好用单个向量替换嵌套向量,但并非总是如此. (2认同)