什么是标准的良好应用::矢量::d ata

What is a good application of std::vector::data?

本文关键字:矢量 ata 应用 标准 什么      更新时间:2023-10-16

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

对我来说,将手"伸入"STL容器似乎是一种不好的做法。

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

谢谢!

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

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

我能想到的一个例子是将 stl 向量转换为特征数组:

#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;
}