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

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

我的函数需要一个void指针:

 void process_data(const void *data); 

在我简单地使用这个代码之前:

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

其中按预期工作。

但是现在我需要std::vector的dynamic性,所以我尝试了这个代码:

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

问题是,如何将char向量传递给我的函数,以便我可以访问向量原始数据(不pipe是哪种格式 – 浮动等)?

我试过这个:

 process_data(&something); 

和这个:

 process_data(&something.begin()); 

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

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

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

  • &something[0]&something.front() (索引为0的元素的地址)或

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

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

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

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

 process_data (&something [0]);