将char *转换为vector C ++

时间:2012-12-31 09:22:03

标签: c++ pointers vector

我有一个内存,我使用char * p来访问它。

我想要一个参考。我该怎么做?

vector<char>& v = p

我需要做什么而不是p将其转换为vector,我还需要告诉它我在内存中使用的char *的大小。

3 个答案:

答案 0 :(得分:1)

如果没有更多信息,很难回答这个问题,但我会尝试。最直接的解决方案可能是将p转换为正确类型的指针,然后构造一个新的向量。如果你想要一个字符向量:

std::vector<char> wewvec(p,p+20) 

其中20是你给出元素数量的地方。也就是说,如果数据真的是char。

如果数据属于其他类型,例如它包含20个浮点数,则可以执行以下操作:

const float* pf=reinterpret_cast<const float*>(p);
std::vector<float> wewvec(pf,pf+20) 

正如迪特里希所写,这将将数据复制到新的载体中。

答案 1 :(得分:0)

如果指针p指向内存块

char* p = new char[100];

您可以通过编写

来创建对它的引用
char& q = *p;

如果您使用容器vector,则需要将内容复制到向量中,如Johan所说

答案 2 :(得分:0)

本质:

  • 一个向量拥有它的内存,它不仅仅引用它。因此,您可以创建一个复制数据的新向量,但是无法让向量“获取”指针并使用它。

  • 如果你必须有一个向量传递给第三方API并且你有一个指针,你将不得不制作副本

  • 如果您控制API,则可以将其更改为采用一系列指针(开始/结束)或指针和大小。这样,如果你已经有了一个向量,你仍然可以访问这些函数(虽然你不能指望begin()end()给你指针。但是有一些方法可以使用{{1}作为指针。然后将大小添加到该指针)。

  • 如果你只需要将数据放入标准算法中,你就可以用指针做到这一点。

显然,您无法执行修改数据大小的矢量操作,例如push_back如果你有一个指针。但是,由于您有&v[0]而不是char*,因此您可以修改成员。