我正在尝试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)