c++ - 如何访问 std::vector 的内部连续缓冲区,我可以将它与 memcpy 等一起使用吗?

标签 c++ stl vector

如何访问 std::vector 中使用的连续内存缓冲区,以便我可以对其执行直接内存操作(例如 memcpy)?此外,在该缓冲区上执行诸如 memcpy 之类的操作是安全的吗?

我读过标准保证 vector 在内部使用连续的内存缓冲区,但它不一定作为动态数组实现。我认为鉴于它绝对是连续的,我应该能够这样使用它 - 但我不确定 vector 实现是否将簿记数据存储为该缓冲区的一部分。如果是这样,那么诸如 memcpy vector 缓冲区之类的操作将破坏其内部状态。

最佳答案

实际上,几乎所有编译器都将 vector 实现为引擎盖下的数组。您可以通过执行 &somevector[0] 获取指向此数组的指针。如果 vector 的内容是 POD('plain-old-data')类型,那么执行 memcpy 应该是安全的 - 但是如果它们是具有复杂初始化逻辑的 C++ 类,您会更安全地使用std::copy .

关于c++ - 如何访问 std::vector 的内部连续缓冲区,我可以将它与 memcpy 等一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7249671/

相关文章:

c++ - 在 C++ 中,如何编写类 ADT——如 std::vector 或 std::stack——将 <> 中的数据类型作为参数并相应地构造对象?

c# - 从 C# 调用托管 C++ 中的 vector

C++指针 vector <base_class*>放置派生类但切片打印

c++ - 使用 tr1::function 时出现编译错误

c++ - 在 Eclipse 中向 'link' 命令添加引号

c++ - 如何在 noexcept 运算符中引用移动构造函数

c++ - 检查 vector 项是否不为空 C++

c++ - 作为参数传递的类对象,访问自己的私有(private)成员

c++ - 为什么我们使用 'this->' 而不是 'this.' 来访问成员?

c++ - Valarray 和自定义分配器