Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从缓冲区及其大小填充std::vector?_C++_C++11_Vector - Fatal编程技术网

C++ 如何从缓冲区及其大小填充std::vector?

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。我的问题是,对于我来说,有没有比遍历缓冲区更好的方法来填充向量

以下是我天真、鲁莽的代码:

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到其中是不好的。