我有一个内存,我使用char * p
来访问它。
我想要一个参考。我该怎么做?
vector<char>& v = p
我需要做什么而不是p将其转换为vector,我还需要告诉它我在内存中使用的char *的大小。
答案 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*
,因此您可以修改成员。