我正在尝试std::vector用作char数组.
我的函数接受一个void指针:
void process_data(const void *data);
Run Code Online (Sandbox Code Playgroud)
在我刚刚使用此代码之前:
char something[] = "my data here";
process_data(something);
Run Code Online (Sandbox Code Playgroud)
哪个按预期工作.
但现在我需要动态性std::vector,所以我尝试了这个代码:
vector<char> something;
*cut*
process_data(something);
Run Code Online (Sandbox Code Playgroud)
问题是,如何将char矢量传递给我的函数,以便我可以访问矢量原始数据(无论是哪种格式 - 浮点数等)?
我试过这个:
process_data(&something);
Run Code Online (Sandbox Code Playgroud)
还有这个:
process_data(&something.begin());
Run Code Online (Sandbox Code Playgroud)
但是它返回了指向乱码数据的指针,后者发出了警告:warning C4238: nonstandard extension used : class rvalue used as lvalue.
Jam*_*lis 227
&something为您提供std::vector对象的地址,而不是它所拥有的数据的地址. &something.begin()给你返回的迭代器的地址begin()(因为编译器警告,这在技术上是不允许的,因为它something.begin()是一个rvalue表达式,所以不能采用它的地址).
假设容器中至少有一个元素,您需要获取容器的初始元素的地址,您可以通过该地址获取
&something[0]或&something.front()(索引0处元素的地址),或
&*something.begin()(返回的迭代器指向的元素的地址begin()).
在C++ 11中,添加了一个新的成员函数std::vector: data().这个成员函数返回容器中初始元素的地址,就像&something.front().这个成员函数的优点是即使容器为空也可以调用它.
Chr*_*odd 74
something.data() 将返回指向向量数据空间的指针.
Ste*_*Don 12
改为使用指向第一个元素的指针:
process_data (&something [0]);
Run Code Online (Sandbox Code Playgroud)