vector如何复制其数据以便重新分配
How does an std::vector copy its data for reallocation?
我编写了一个类似于std::vector的模板数组类,除了它在删除元素时重用空索引或'孔',而不是将所有以下元素移回填充它。
我遇到了一个错误,虽然当我试图存储一个不平凡的对象,因为我使用内存在重新分配期间复制元素。vector是循环遍历它的所有元素并调用复制构造函数,还是使用了我不知道的其他技巧?
是的,复制元素然后销毁原始元素是基本思想。
你可以用模板元编程进行优化,当然:
- 如果类型有一个简单的复制构造函数,你可以使用
memcpy
- 如果类型有一个简单的析构函数,你可以跳过这一步
c++ 11增加了一个新的维度,你也可以移动对象
不,您不应该对非pod使用memcpy()。经典的c++ 03实现是使用复制构造函数,但这不是很有效。在c++ 11中,您可以使用整个元信息库,例如is_trivially_copyable,在适用时执行memcpy(),检查是否存在move构造函数等。
相关文章:
- 新分配指向函数的指针是否合法?
- 变体 - 分配新值时是否清理旧值?
- 分配新的零大小数组可以具有有效价值吗?
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 在函数返回中返回对新分配的shared_ptr的尊重合法吗
- 如何删除新分配的字符,这也是函数返回值?
- C ++中新分配的int的内存大小,有没有不同更好的方法来查看它?
- OpenSSL:当输出ptr为空时,BIGNUM的bin2bn不会分配新的BIGNUM
- 每次我分配新的位置时,都会隐式地称为destuructor
- 为什么这个指针到指针的二维数组像这样分配新的 int
- 如何创建对象变量,以便每次分配新的指针
- C 新操作员分配新内存
- 编译器忽略运算符新分配
- 方法向量的新/分配的复杂性::p ush_back
- 有没有一种方法可以全局填充新分配/删除分配
- 调用时为 std::function 分配新值
- 为什么我的新分配指针会自动在程序退出上删除
- 如果我尚未为指针分配新值,是否需要删除指针?
- OpenCV:为矩阵元素分配新值
- 在避免新分配的同时,const变量的复杂初始化