#include <boost/ptr_container/ptr_vector.hpp>
#include <iostream>
using namespace std;
class Derived
{
public:
int i;
Derived() {cout<<"Constructed Derived"<<endl;}
Derived(int ii):i(ii) {cout<<"Constructed Derived"<<i<<endl;}
~Derived() {cout<<"* Destructed Derived"<<i<<endl;}
};
int main()
{
boost::ptr_vector<Derived> pv;
for(int i=0;i<10;++i) pv.push_back(new Derived(i));
boost::ptr_vector<Derived>::iterator it;
for (it=pv.begin(); it<pv.end();/*no iterator increment*/)
pv.erase(it);
cout<<"Done erasing..."<<endl;
}
请注意,第二个for循环不会递增迭代器,但它会迭代和删除所有元素。我的问题是:ptr_vector迭代器不需要增量吗?
- 是我的迭代的技术,使用迭代是否正确?
- 如果for循环中不需要迭代器增量,那么增量会在何处发生?
- 使用一个迭代器或将一个普通的整数是否更好(即:是否有使用迭代器的任何增值)? (因为我也可以像pv.erase(pv.begin()+ 5)一样擦除第五个元素;)
- 是否有任何方法将新对象分配给ptr_vector的特定位置(比方说第5个位置)直?我正在寻找像pv [5] = new Derived(5);的东西。任何方式做到这一点?
很酷!希望能回答问题3和4 :) – Nav 2010-10-23 09:59:19
没有。我试过PV [0] =派生(888);并获得此输出:构造Derived888 boostPtrVsSTL:/usr/include/boost/ptr_container/ptr_sequence_adapter.hpp:325:typename boost :: ptr_container_detail :: reversible_ptr_container,CloneAllocator>: :引用boost :: ptr_sequence_adapter :: :: operator [](typename boost :: ptr_container_detail :: reversible_ptr_container –
Nav
2010-10-23 10:06:50
[continue ...],CloneAllocator> size_type)[with T = Derived,VoidPtrSeq = std :: vector>,CloneAllocator = boost :: heap_clone_allocator]:断言'n < this-> size()'失败。 Aborted(核心转储) –
Nav
2010-10-23 10:07:20