检索 std::vector 原始数据指针
在编程中,通常需要将数据传递给需要原始指针的函数数据本身。当使用像 std::vector 这样的动态容器时,此任务可能具有挑战性。
考虑一个场景,其中您有一个函数 process_data() ,它接受 const void 指针作为输入。以前,您可以简单地通过引用传递 char 数组:
char something[] = "my data here"; process_data(something);
但是,当将此逻辑转换为使用 std::vector
vector<char> something; process_data(something);
或获取其开始迭代器的地址:
process_data(&something.begin());
导致无意义的数据或编译器警告。
挑战在于获取指向 std 中实际数据的指针::向量。为此,有多种选项可供选择:
1。访问第一个元素:
您可以检索向量中第一个元素的地址:
process_data(&something[0]); // or &something.front()
2。使用 data() 成员函数(C 11 及更高版本):
在 C 11 中,std::vector 引入了 data() 成员函数:
process_data(something.data());
此函数是首选,因为即使向量为空,调用也是安全的。
注意: &something 提供向量对象本身的地址,而不是其数据。因此,它不应该用于此目的。
以上是如何从 std::vector 获取原始数据指针?的详细内容。更多信息请关注PHP中文网其他相关文章!