【发布时间】:2018-05-27 07:16:12
【问题描述】:
我有一个类似于以下的代码:
myLibFunc(std::vector<char > &data)
{
// dosomthing with data
}
myFunc(char *buffer,int bufferSize)
{
std::vector<char > mydata(buffer,buffer+bufferSize);
myLibFunc(mydata);
}
代码有效,但向量为自己分配内存,而不是使用已经可用的内存。
如何更改代码以使向量使用已经可用的内存而不分配额外的内存?
请注意,我不能更改函数的签名。
更新
我有两个功能:
在其中一个中,我收到一个缓冲区,我需要操作内存并将其作为向量传递给下一个函数。我试图实现的功能是接口的一部分,所以我无法更改它。另一个函数是我需要调用的库,所以我不能更改函数的签名。
问题是上面的代码分配了新的内存并将数据从缓冲区复制到它不是最优的。
【问题讨论】:
-
首先,您创建一个 C 风格的 字符串 向量,而不是字符向量。至于您的问题,您似乎想要一个
std::string_view。如果您还没有std::string_view,那么创建类似string_view的包装器很容易。 -
那么你不能使用
vector,因为你需要给它一个不同的分配器类型,这是一个模板参数,因此会改变签名。 -
你不能。容器通过设计管理自己的内存。你想要一个视图而不是一个容器
-
简短回答:你不知道。你创建你的向量,如果你需要访问原始指针,那么你可以做
data() -
@Logman 自定义分配器更改类型。
std::vector<char>与std::vector<char, AllocatorThatDoesntAllocate>不兼容,此时你不妨使用string_view