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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我试着用std::vector作为char阵列。

我的函数接受一个空指针:

void process_data(const void *data);

在我仅仅使用以下代码之前:

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

正如预期的那样。

但现在我需要的是活力std::vector,所以我尝试了下面的代码:

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

问题是,如何将char向量传递给我的函数,这样我就可以访问向量原始数据(不管它的格式是-Floats,等等)?

我试过这个:

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()是一个rvalue表达式,因此不能使用它的地址)。

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

  • &something[0]&something.front()(元素位于索引0的地址),或
  • &*something.begin()返回的迭代器指向的元素的地址。begin().

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

用户回答回答于

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

扫码关注云+社区