【问题标题】:Convert std::vector to array将 std::vector 转换为数组
【发布时间】:2010-09-24 12:32:11
【问题描述】:

我有一个库,它需要一个数组并填充它。我想使用 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,下面的答案仍然有效!

【问题讨论】:

标签: c++ stl vector


【解决方案1】:

是的:

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

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

【讨论】:

  • 但要小心零大小的数组。
  • 如果向量被重新定位怎么办?
  • @alxx:如果重新分配,就好像array 被重新安置(如果它没有在堆栈上分配),那么指针现在将无效。 @GMan:我建议传递大小,即使原始问题中没有它。
  • 请注意,这仅适用于带有 T!=bool 的 std::vector,因为 std::vector 是一种特殊情况,其中 8 个布尔值被压缩到一个字节中。
  • @Manolete:你可以得到内部向量的指针指向它的 int 数组,你可以得到外部向量的指针指向它的 vector&lt;int&gt; 数组,但是没有办法得到一个连续的每个int 的数组,因为这不是那个容器所说的。那将是vector&lt;int&gt;通常最好用单个向量替换嵌套向量,但并非总是如此。
猜你喜欢
  • 2020-11-07
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2016-03-31
  • 2020-06-20
相关资源
最近更新 更多