我正在尝试std::vector用作char数组。
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.
warning C4238: nonstandard extension used : class rvalue used as lvalue
&something给你std::vector对象的地址,而不是它持有的数据的地址。 &something.begin()给你返回的迭代器的地址begin()(正如编译器警告的那样,这在技术上是不允许的,因为something.begin()它是一个右值表达式,所以它的地址不能被取走)。
&something
&something.begin()
begin()
something.begin()
假设容器中至少有一个元素,则需要获取容器初始元素的地址,可以通过
&something[0]或&something.front()(索引 0 处元素的地址),或
&something[0]
&something.front()
&*something.begin()(返回的迭代器指向的元素的地址begin())。
&*something.begin()
在 C++11 中,一个新的成员函数被添加到std::vector: data()。该成员函数返回容器中初始元素的地址,就像&something.front(). 这个成员函数的好处是即使容器是空的也可以调用它。
data()