By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,234 Members | 1,896 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,234 IT Pros & Developers. It's quick & easy.

Vector Assign vs Vector operator=

P: n/a
vector<doublev1(5,1);
vector<doublev2;

v2 = v1; // 1
v2.assign(v1.begin(),v1.end()); // 2

Are 1 and 2 the same, or are their subtle differences between them.
Which is preferable, if either? And yes, I know I could use the
construction vector<doublev2(v1), but I'm giving an example above.

Thank you c++ users.
Feb 21 '07 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Chris Roth wrote:
vector<doublev1(5,1);
vector<doublev2;

v2 = v1; // 1
v2.assign(v1.begin(),v1.end()); // 2

Are 1 and 2 the same, or are their subtle differences between them.
Which is preferable, if either? And yes, I know I could use the
construction vector<doublev2(v1), but I'm giving an example above.

Thank you c++ users.
No observable difference between them, but 1 is clearly better since it
is clearer to any reader of the code. With 2 you have to check the
arguments to understand the meaning.

john
Feb 21 '07 #2

P: n/a
Chris Roth wrote:
vector<doublev1(5,1);
vector<doublev2;

v2 = v1; // 1
v2.assign(v1.begin(),v1.end()); // 2

Are 1 and 2 the same, or are their subtle differences between them.
Which is preferable, if either? And yes, I know I could use the
construction vector<doublev2(v1), but I'm giving an example above.
As John said, there's probably no detectable difference. The latter
construct (assign) is more useful when you want to copy a subvector.

e.g.:

vector<doublev1;
vector<doublev2;

// fill v1 here.

vector<double>::iterator start_iter = some_iterator_into_v1;
vector<double>::iterator end_iter = some_other_iterator_into_v1;

v2.assign(start_iter, end_iter);

Feb 21 '07 #3

P: n/a
On Feb 21, 4:40 pm, red floyd <no.s...@here.dudewrote:
Chris Roth wrote:
vector<doublev1(5,1);
vector<doublev2;
v2 = v1; // 1
v2.assign(v1.begin(),v1.end()); // 2
Are 1 and 2 the same, or are their subtle differences between them.
Which is preferable, if either? And yes, I know I could use the
construction vector<doublev2(v1), but I'm giving an example above.

As John said, there's probably no detectable difference. The latter
construct (assign) is more useful when you want to copy a subvector.

e.g.:

vector<doublev1;
vector<doublev2;

// fill v1 here.

vector<double>::iterator start_iter = some_iterator_into_v1;
vector<double>::iterator end_iter = some_other_iterator_into_v1;

v2.assign(start_iter, end_iter);
Also, using assign allows you to assign across container types:

vector<intv;
list<intll;

// fill ll here

v.assign(ll.begin(), ll.end());

Feb 21 '07 #4

P: n/a
red floyd wrote:
Chris Roth wrote:
>vector<doublev1(5,1);
vector<doublev2;

v2 = v1; // 1
v2.assign(v1.begin(),v1.end()); // 2

Are 1 and 2 the same, or are their subtle differences between them.
Which is preferable, if either? And yes, I know I could use the
construction vector<doublev2(v1), but I'm giving an example above.

As John said, there's probably no detectable difference. The latter
construct (assign) is more useful when you want to copy a subvector.
In case 1, v1 must be a vector.
In case 2, v1 can be anything provided that the iterators returned
are of a type that's insertable into v2.
Feb 22 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.