如何获取原始数据的向量指针?

我尝试使用 std::vector作为 char数组。

我的函数接受一个 void 指针:

void process_data(const void *data);

在我使用这段代码之前:

char something[] = "my data here";
process_data(something);

果然有效。

但是现在我需要 std::vector的动态性,所以我尝试了以下代码:

vector<char> something;
*cut*
process_data(something);

问题是,如何将字符向量传递给函数,以便访问向量原始数据(不管它是哪种格式-float 等) ?

我试过了:

process_data(&something);

还有这个:

process_data(&something.begin());

但它返回了一个指向胡言乱语数据的指针,后者给出了警告: warning C4238: nonstandard extension used : class rvalue used as lvalue

174066 次浏览

取一个指向第一个元素的指针:

process_data (&something [0]);

&something给出的是 std::vector对象的地址,而不是它保存的数据的地址。&something.begin()给出了由 begin()返回的迭代器的地址(正如编译器警告的那样,这在技术上是不允许的,因为 something.begin()是一个 rvalue 表达式,所以它的地址不能被获取)。

假设容器中至少有一个元素,您需要获取容器的初始元素的地址,您可以通过这个地址获取

  • &something[0]&something.front()(位于索引0的元素的地址) ,或者

  • &*something.begin()(由 begin()返回的迭代器指向的元素的地址)。

在 C + + 11中,向 std::vector添加了一个新的成员函数: data()。这个成员函数返回容器中初始元素的地址,就像 &something.front()一样。这个成员函数的优点是,即使容器是空的,也可以调用它。

something.data()将返回一个指向向量数据空间的指针。