如何解决如何获取指向原始数据的 std::vector 指针??
&something
给你std::vector
对象的地址,而不是它持有的数据的地址。&something.begin()
给你返回的迭代器的地址begin()
(正如编译器警告的那样,这在技术上是不允许的,因为something.begin()
它是一个右值表达式,所以它的地址不能被取走)。
假设容器中至少有一个元素,则需要获取容器初始元素的地址,可以通过
-
&something[0]
或&something.front()
(索引 0 处元素的地址),或 -
&*something.begin()
(返回的迭代器指向的元素的地址begin()
)。
在 C++11 中,一个新的成员函数被添加到std::vector
:data()
。该成员函数返回容器中初始元素的地址,就像&something.front()
. 这个成员函数的好处是即使容器是空的也可以调用它。
解决方法
我正在尝试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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。