将输入迭代器(指针)复制到vector
c++ std::copy input iterator (pointers) to vector
你好,我试图理解为什么下面的代码不工作。我试图使用指针作为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));
相关文章:
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- 使用赋值运算符复制 std::vector
- 除了 std::vector 之外,是否有一个 std 容器不会复制和销毁作为类的元素?
- 将 Vector<String > 元素复制到其他 Vector<String>* (1 作为
- push_back std::vector,则重复调用复制构造函数
- 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备
- 双重调用传递给 std::vector::emplace_back 的类的复制构造函数
- std::vector 是否有用于引用的复制构造函数?
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- c++17在编译时将带有已删除复制构造函数的类添加到std::vector
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- 如何使 std::vector<T> 使用现有的 T* 数组而不复制这些值?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- pybind11:如何包装以 std::vector<double> 为参数以避免数据复制的 C++ 函数
- 在线程之间复制 std::vector 而不锁定
- 我如何在std :: vector中生成对象,而无需复制
- 深度复制Vector时,Vector迭代器不兼容
- 复制vector和赋值vector的区别是什么?
- 复制vector并保留vector成员的内存地址
- CudaMemCpy 在复制 vector<cv::P oint3f 时返回 cudaErrorInvalidValue>