STL cloning a vector
!Hi I have a hard time trying to copy vector of pointers to Point. I have a
vector<Point*> oldVector
and I want to copy this vector into other vector. So I used a copying constructor. I did this that way
vector<Point*> newVector = vector<Point*>(oldVector.begin(),oldVector.end());
Unfortunately I get an exception/error if I ran this function.
vector interators incompatible
What ma开发者_如何学运维y be the problem ??
EDIT There must be a bigger problem with iterators, it seems that I can't use iterators at all. I wanted to add two stl vectors into each other so I used wrote sth like this
vector<int> a, b;
b.insert(b.end(), a.begin(), a.end());
and I get the sama exception/error during execution of this line
That would be either
vector<Point*> *newVector = new vector<Point*>(oldVector.begin(),oldVector.end());
or
vector<Point*> newVector(oldVector.begin(),oldVector.end());
When creating objects, you only use assignment when allocating from the heap. Otherwise, you simply place the constructor argument(s) inside parentheses after your new variable name.
Alternatively, the following is much simpler:
vector<Point*> newVector(oldVector);
vector<Point*> newVector = vector<Point*>(oldVector.begin(),oldVector.end());
Why this?
Why not this:
vector<Point*> newVector(oldVector.begin(),oldVector.end());
??. The latter the better!
Even better is this,
vector<Point*> newVector(oldVector);
Because the original container is of identical type, std::vector<Point*>
, there's no need to use the range constructor; simply use the copy constructor!
std::vector<Point*> newVector(oldVector);
But that's not the main concern here. The main issue here is that of shared pointers. Be very clear with yourself who owns the pointed-at data. Be careful of double-delete!
You want
Vector<Point*> newVector(oldVector.begin(), oldVector.end());
That should work (just tested with std::vector<int>
s). There must be some other problem. Does Point
have a copy constructor?
精彩评论