C++ 如何从缓冲区及其大小填充std::vector?
我有一个关于类型的简单问题。根本的问题很简单:我有一个函数,它将数据流读入缓冲区并获取缓冲区的大小,然后将该数据作为向量返回。集合元素的类型是固定的,uint8\t。我的问题是,对于我来说,有没有比遍历缓冲区更好的方法来填充向量 以下是我天真、鲁莽的代码:C++ 如何从缓冲区及其大小填充std::vector?,c++,c++11,vector,C++,C++11,Vector,我有一个关于类型的简单问题。根本的问题很简单:我有一个函数,它将数据流读入缓冲区并获取缓冲区的大小,然后将该数据作为向量返回。集合元素的类型是固定的,uint8\t。我的问题是,对于我来说,有没有比遍历缓冲区更好的方法来填充向量 以下是我天真、鲁莽的代码: uint8_t* buffer; size_t size; stream->readBuffer(buffer, size); // I don't own the stream class std::vector<uint8_t
uint8_t* buffer;
size_t size;
stream->readBuffer(buffer, size); // I don't own the stream class
std::vector<uint8_t> output(size);
for (size_t i = 0; i < currentChunkLength; i++)
{
output.push_back(buffer[i]);
}
return output;
使用构造函数获取迭代器:
std::vector<unit8_t> output(buffer, buffer + size);
使用构造函数获取迭代器:
std::vector<unit8_t> output(buffer, buffer + size);
您可以在一个步骤中读取您拥有的向量:
您可以在一个步骤中读取您拥有的向量:
标准::矢量缓冲区,缓冲区+大小;PS:如果你初始化一个向量的大小,不要使用推回,你会得到两倍元素,其中上半部有缺省值。啊,我没有看到类似的问题,我没有考虑我的指针和长度是一个C样式数组。令人惊讶的是,答案都不一样!不管怎样,看起来我应该作为一个dupe.std::vectorbuffer,buffer+size关闭它;PS:如果你初始化一个向量的大小,不要使用推回,你会得到两倍元素,其中上半部有缺省值。啊,我没有看到类似的问题,我没有考虑我的指针和长度是一个C样式数组。令人惊讶的是,答案都不一样!不管怎样,看起来我应该把它当作一个傻瓜来结束。我没有考虑过这个。就因为我好奇,直接读入向量的利与弊是什么?我假设我至少保存了一次内存分配?如果readBuffer方法本身分配内存,我认为您无法做到这一点。@fatcat1111内存分配到什么?在您的示例中,缓冲区ptr是unitializedstd::vector是连续的,并且没有内存泄漏。这是C++内存堆使用简单方式的方法。我已经多年没有直接调用delete或delete[]了。@fatcat1111正是我的观点,在你的例子中,没有指向任何东西,所以memcopying到它是不好的。有趣。我没有考虑过这个。就因为我好奇,直接读入向量的利与弊是什么?我假设我至少保存了一次内存分配?如果readBuffer方法本身分配内存,我认为您无法做到这一点。@fatcat1111内存分配到什么?在您的示例中,缓冲区ptr是unitializedstd::vector是连续的,并且没有内存泄漏。这是C++内存堆使用简单方式的方法。我已经多年没有直接调用delete或delete[]了。@fatcat1111我的观点正是如此,在你的例子中,没有指向任何东西,所以memcopying到其中是不好的。