Re: (silly?) speed comparisons

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • mk

    Re: (silly?) speed comparisons

    Rajanikanth Jammalamadaka wrote:
    Try using a list instead of a vector for the C++ version.
    Well, it's even slower:

    $ time slice4

    real 0m4.500s
    user 0m0.015s
    sys 0m0.015s


    Time of execution of vector version (using reference to a vector):

    $ time slice2

    real 0m2.420s
    user 0m0.015s
    sys 0m0.015s

    Still slower than Python!


    Source, using lists in C++:

    ---- slice4.c++ ----
    #include <list>
    #include <iostream>
    #include <string>

    using namespace std;

    list<stringmove _slice(list<str ing>& slist, int start, int stop, int dest)
    {
    int idx;
    if( dest stop)
    idx = dest - (stop - start);
    else
    idx = dest;

    list<stringfrag ;

    int i;
    list<string>::i terator startiter;
    list<string>::i terator enditer;

    startiter = slist.begin();

    for (i = 0; i < start; i++)
    startiter++;
    enditer = startiter;

    // copy fragment
    for (i = start; i < stop; i++)
    {
    frag.push_back( *enditer);
    enditer++;
    }

    // delete frag from the slist
    slist.erase( startiter, enditer );

    // insert frag into slist at idx
    startiter = slist.begin();
    for (i = 0; i < idx; i++)
    startiter++;
    slist.insert( startiter, frag.begin(), frag.end());

    /* cout << "frag " << endl;
    for (startiter = frag.begin(); startiter != frag.end(); startiter ++)
    cout << *startiter << " ";
    cout << endl;

    cout << "slist " << endl;
    for (startiter = slist.begin(); startiter != slist.end(); startiter++)
    cout << *startiter << " ";
    cout << endl;*/

    return slist;
    }


    int main(int argc, char* argv)
    {
    list<stringslic e;
    string u = "abcdefghij ";
    int pos;
    for (pos = 0; pos < u.length(); pos++)
    slice.push_back (u.substr(pos,1 ));
    int i;
    for (i = 0; i<1000000; i++)
    move_slice(slic e, 6, 7, 7);

    }

    --------------------


    Source, using reference to a vector:

    ---- slice2.c++ ----
    #include <vector>
    #include <iostream>
    #include <string>

    using namespace std;

    vector<stringmo ve_slice(vector <string>& vec, int start, int stop, int
    dest)
    {
    int idx = stop - start;
    vector<stringfr ag;
    for (idx = start; idx < stop; idx++)
    frag.push_back( vec.at(idx));
    if( dest stop)
    idx = dest - (stop - start);
    else
    idx = dest;
    vec.erase( vec.begin() + start, vec.begin() + stop);
    vec.insert( vec.begin() + idx, frag.begin(), frag.end());
    return vec;
    }


    int main(int argc, char* argv)
    {
    vector<stringsl ice;
    string u = "abcdefghij ";
    int pos;
    for (pos = 0; pos < u.length(); pos++)
    slice.push_back (u.substr(pos,1 ));
    int i;
    for (i = 0; i<1000000; i++)
    move_slice(slic e, 6, 7, 7);

    }

    -----------------

Working...