On Feb 23, 10:05 am, "Gavin Deane" <deane_ga...@hotmail.com> wrote:
On 23 Feb, 14:53, "Manish" <mar...@gmail.com> wrote:
On Feb 23, 9:33 am, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
Manish wrote:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main(int argc, char *argv[])
{
if (argc < 2) {
cout << "invalid number of args: " << argc << endl;
exit(1);
}
vector<int> v1;
vector<int> v2;
v1.push_back(5);
v2.push_back(6);
v2.push_back(7);
for (int i = 0; i < atoi(argv[1]); i++) {
// Alternative 1
//v1.insert(v1.end(), v2.begin(), v2.end());
// Alternative 2
v2.resize(v1.size());
std::transform(v1.begin(), v1.end(), v2.begin(), v2.begin(),
plus<int>());
}
return 0;
}
For 'alternative 1' you're doing 100000 inserts of 2 [more] elements
into 'v1', making it reallocate itself at least log2(100000) times
(or some such number). In 'alternative 2', 'resize' is executed
_always_ to the same size (1 from 2, which surely does not require
reallocation) and transform only changes 1 value (yes, 100000 times).
Your benchmark is not valid, unless I missed something.
My attempt is to compare the efficiency of the two alternatives.
How else should they be compared?
Unless *I* missed something, your two "alternatives" are not
alternatives at all. They do completely different things. Have you
actually looked at what happens to the vectors - what they contain
after each of your alternatives? Comparing them isn't meaningful.
Gavin Deane- Hide quoted text -
- Show quoted text -
transform: "Applies a specified function object to each element in a
source range or to a pair of elements from two source ranges and
copies the return values of the function object into a destination
range." http://msdn2.microsoft.com/en-us/library/391xya49(VS.80).aspx
If I understand correctly, the 'transform' is being used to do the
following:
v2 = v1 + v2
Now, the Alternative 1, "v1.insert(v1.end(), v2.begin(), v2.end());"
can also be used to achieve the same result. Right?
No: Alternative 1 concatenates vectors (increasing the length). What you
affect the stored values).