最近在工作中遇到了使用vector中insert()方法中遇到的问题:
问题出现场景:
使用vector中的insert方法: 第一个和第二个方法使用都没问题,问题出现在第三种情况, 把一个vector的内容加入到一个新的vector里面, 第一个参数 interator position使用了vector的begin(),也就是每次都向前插入.
single element (1)
iterator insert (iterator position, const value_type& val);
fill (2) void insert (iterator position, size_type n, const value_type& val);
range (3) template <class InputIterator>
void insert (iterator position, InputIterator first, InputIterator last);
结果导致插入的类对象最后的顺序错误, 网上看了一些解释,说可能是类的构造函数或者赋值函数未显示实现,同时都需要实现深拷贝, 但是解决这些问题后还是出现问题了, 可能的原因在于每一个vector中的class对象的大小不一致造成的结果.
所以在使用自定义类型作为vector的对象时, 得考虑每个对象占用的内存大小, 如果vector需要向后移动每个元素再插入新的元素, 得确保每个元素所在的内存大小能满足要求. 上面的问题如果每次都在后面进行插入就没有问题.