如何获取原始数据的std :: vector指针?

时间:2011-06-26 17:24:35

标签: c++ stl vector

我尝试将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);

问题是,如何将char矢量传递给我的函数,以便我可以访问矢量原始数据(无论是哪种格式 - 浮点数等)?

我试过了:

process_data(&something);

而且:

process_data(&something.begin());

但它返回了指向乱码数据的指针,后者发出警告:warning C4238: nonstandard extension used : class rvalue used as lvalue

3 个答案:

答案 0 :(得分:218)

&something为您提供std::vector对象的地址,而不是它所拥有的数据的地址。 &something.begin()为您提供begin()返回的迭代器的地址(正如编译器警告的那样,这在技术上是不允许的,因为something.begin()是一个右值表达式,因此无法获取其地址)。 / p>

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

获取该元素的地址。
  • &something[0]&something.front()(索引0处元素的地址)或

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

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

答案 1 :(得分:72)

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

答案 2 :(得分:12)

改为使用指向第一个元素的指针:

process_data (&something [0]);