将输入迭代器(指针)复制到vector

c++ std::copy input iterator (pointers) to vector

本文关键字:复制 vector 指针 输入 迭代器      更新时间:2023-10-16

你好,我试图理解为什么下面的代码不工作。我试图使用指针作为std::copy算法的输入迭代器类型。fsRead。缓冲区指向我要复制的数据的开始,然后fsRead。BufferSize是我们要复制的数据的大小。

// AllocateZeroPool(UINT64) takes an input size, and returns a pointer to allocated memory. (this is the existing C api)
fsRead.Buffer = static_cast<UINT8*>(AllocateZeroPool(fsRead.BufferSize));
//
// this next line populates the data into fsRead.Buffer
auto status = mFs->read_data(nullptr, &fsRead);
the type of file.data is: std::vector<UINT8>
std::copy(fsRead.Buffer, fsRead.Buffer + fsRead.BufferSize, file.data.begin());

file.data.size()对于上面的std::copy()调用为零。

将数据放入矢量文件。数据,我目前手工复制:

for(auto i(0U); i < fsRead.BufferSize; ++i) {
    file.mBinaryData.emplace_back(fsRead.Buffer[i]);
}

为什么使用两个指针作为输入迭代器似乎不起作用?

edit:澄清一下,我的意思是实际上没有数据被复制到文件中。mBinaryData向量。

对于std::vector,您必须使用std::back_inserter。如果没有它,迭代器将不会执行push_back操作来复制数据,而只是对给定的迭代器进行自增。

std::copy(fsRead.Buffer, fsRead.Buffer + fsRead.BufferSize, std::back_inserter(file.data));

操作失败,因为访问vector的迭代器不会改变vector的大小。

您可以使用标准的迭代器适配器之一,例如back_inserter,来完成此操作。它看起来像这样:

// Looks like you really wanted copy_n instead...
std::copy_n(fsRead.Buffer, fsRead.BufferSize, std::back_inserter(file.data));