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

问题描述 投票:0回答:3

所以我和我的朋友有一天在查看

std::vector
类时注意到,您可以使用函数
std::vector::data
来检索指向 c++11 中内部数组的指针。直观上,这似乎有点多余,因为无论如何您都可以使用向量上的
[]
来访问/更新内部数组的内容。

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

不管怎样,一定有一些好的应用。所以我的问题是,这些应用程序是什么?

谢谢!

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

c++ c++11 vector stl
3个回答
3
投票

例如,如果您需要将数据传递给仅接受指针的函数。例如 OpenGL 有很多这样的东西(例如

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


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;

}

0
投票

std::vector::data
的一个很好的应用是与不理解 C++ 容器但需要对数组进行原始指针访问的 C API 或遗留代码库进行交互。

例如,考虑一个需要指向整数数组的指针的 C 库函数:

int sum(const int* data, size_t size)

在这里,您可以将

std::vector
传递给函数,如下所示:

std::vector<int> vec = { 1, 2, 3, 4, 5 };
int result = sum(vec.data(), vec.size());
© www.soinside.com 2019 - 2024. All rights reserved.