什么是std :: vector :: data的好应用?

时间:2015-03-11 03:09:32

标签: c++ c++11 vector stl

所以我的朋友和我前几天正在查看std::vector类,并注意到你可以使用函数std::vector::data在c ++ 11中检索指向内部数组的指针。直观地说,这似乎有点多余,因为你可以使用矢量上的[]来访问/更新内部数组的内容。

对我来说,“把手伸进”STL容器似乎是不好的做法。

无论如何,它必须有一些很好的应用。所以我的问题是,那些应用程序是什么?

谢谢!

参考: http://www.cplusplus.com/reference/vector/vector/data/

2 个答案:

答案 0 :(得分:3)

例如,如果您需要将数据传递给只接受指针的函数。例如,OpenGL有很多(例如glBufferData)。 std::vector使内存管理变得简单,因此对于容器来说它是一个很好的选择,而不是自己管理内存并可能将其泄漏到某个地方。这并不意味着你通过返回的指针改变向量内容,而是读取它和/或将它传递给期望指针的函数。

答案 1 :(得分:2)

我能想到的一个例子是将stl向量转换为Eigen Array

#include <iostream>
#include <Eigen/Dense>
#include <vector>

using namespace Eigen;

int main(){
  std::vector<int> my_vec {1,2,3,4};

  Array<int, 4, 1> my_array(my_vec.data());

  std::cout << my_array << std::endl;

}