所以我和我的朋友有一天在查看
std::vector
类时注意到,您可以使用函数 std::vector::data
来检索指向 c++11 中内部数组的指针。直观上,这似乎有点多余,因为无论如何您都可以使用向量上的 []
来访问/更新内部数组的内容。
对我来说,“把手伸进”STL 容器似乎是一种不好的做法。
不管怎样,一定有一些好的应用。所以我的问题是,这些应用程序是什么?
谢谢!
例如,如果您需要将数据传递给仅接受指针的函数。例如 OpenGL 有很多这样的东西(例如
glBufferData
)。 std::vector
使内存管理变得容易,因此对于容器来说这是一个不错的选择,而不是自己管理内存并可能将其泄漏到某个地方。这并不意味着您通过返回的指针改变向量内容,而是读取它和/或将其传递给需要指针的函数。
我能想到的一个例子是将 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;
}
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());