首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将std::vector<POD>复制到std::vector<char*>中的函数?

将std::vector<POD>复制到std::vector<char*>中的函数?
EN

Stack Overflow用户
提问于 2022-10-19 12:49:50
回答 1查看 68关注 0票数 0

我需要一个函数,可以接受vector的任何一个floatintdoubleshort。然后,它应该将vector中的所有数据复制到一个新的vector of char*中。

这是我的尝试。这是我第一次不得不使用memcpy,所以我不知道自己在做什么。

代码语言:javascript
复制
#include <vector>
#include <memory>


std::vector<float> vertices = { 0.0, 0.1, 0.2, 0.3, 0.4 };

std::unique_ptr<std::vector<char*>> buffer = std::make_unique<std::vector<char*>>();
template<class Type>
void SetVertices(const std::vector<Type>& v)
{
    buffer->clear();
    buffer->resize(v.size() * sizeof(Type));
    memcpy(buffer.get(), v, v.size() * sizeof(Type));
}

int main()
{
    SetVertices(vertices);
} 

以下是错误消息:

错误C2664:'void *memcpy(void *,const *,size_t)':无法将参数2从“const std::vector”转换为“const std::vector*”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-19 13:07:03

你的代码有几个问题。首先,memcpy接受一个指向要复制的数据和要复制数据的位置的指针。这意味着您不能将v传递给memcpy,而是需要传递v.data(),因此可以获得指向向量元素的指针。

第二个问题是缓冲区有错误的类型。您希望将数据存储为字节,因此希望将其存储在char缓冲区中。std::vector<char*>不是字节缓冲区,而是指向潜在缓冲区的指针集合。您需要的是一个std::vector<char>,它是一个单字节缓冲区。做这些改变会让你

代码语言:javascript
复制
#include <vector>
#include <memory>
#include <cstring>

std::vector<float> vertices = { 0.0, 0.1, 0.2, 0.3, 0.4 };

std::vector<char> buffer;
template<class Type>
void SetVertices(const std::vector<Type>& v)
{
    buffer.clear();
    buffer.resize(v.size() * sizeof(Type));
    std::memcpy(buffer.data(), v.data(), v.size() * sizeof(Type));
}

int main()
{
    SetVertices(vertices);
} 

实例化

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74125618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档