0

嗨,我想了解为什么以下代码不起作用。我正在尝试使用指针作为 std::copy 算法的输入迭代器类型。fsRead.Buffer 指向我要复制的数据的开头, 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() 调用中为零。

要将数据放入矢量 file.data,我目前手动进行复制:

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

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

编辑:为了澄清,我的意思是实际上没有数据被复制到 file.mBinaryData 向量中。

4

2 回答 2

4

std::vector必须使用std::back_inserter. 没有它,迭代器将不会push_back复制数据,而只会增加给定的迭代器。

std::copy(fsRead.Buffer, fsRead.Buffer + fsRead.BufferSize, std::back_inserter(file.data));
于 2013-01-14T17:45:25.213 回答
3

这失败了,因为访问向量的迭代器永远不会改变向量的大小。

您可以使用其中一种标准迭代器适配器,例如back_inserter,来代替。看起来像这样:

// Looks like you really wanted copy_n instead...
std::copy_n(fsRead.Buffer, fsRead.BufferSize, std::back_inserter(file.data));
于 2013-01-14T17:45:41.420 回答