LINUX.ORG.RU

История изменений

Исправление wota, (текущая версия) :

Синтаксисом померились теперь о быстродействии

~$ cat 1.cpp
inline void add( char*& d, const char* s ) {
    while(*s) *d++=*s++;
}

int main() {
    const char* v[] = {"John", "James", "Jakob", "Peter", "Janette", "Tom", "Vasya", "Jean", "Juilia", "Heather"};
    char buf[128];

    for(int k=0;k<1000000;++k) {
        int n=0; char* s=buf;
        for( auto i : v ) if(*i=='J') {
            if(n++) {
                if(n%3==2) add(s," and ");
                else if(n%3) *s++='\n';
                else add(s," follow ");
            }
            add(s,i);
        } 
        *s=0;
    }
}
~$ g++ -Ofast -std=c++11 1.cpp
~$ time ./a.out 

real	0m0.048s
user	0m0.048s
sys	0m0.000s

Исходная версия wota, :

Синтаксисом померились теперь о быстродействии

~$ cat 1.cpp
inline void add( char*& d, const char* s ) {
    while(*s) *d++=*s++;
}

int main() {
    const char* v[] = {"John", "James", "Jakob", "Peter", "Janette", "Tom", "Vasya", "Jean", "Juilia", "Heather"};
    char buf[128];

    for(int k=0;k<1000000;++k) {
        int n=0; char* s=buf;
        for( auto i : v ) if(*i=='J') {
            if(n++) {
                if(n%3==2) add(s," and ");
                else if(n%3) *s++='\n';
                else add(s," follow ");
            }
            add(s,i);
        } 
        *++s=0;
    }
}
~$ g++ -Ofast -std=c++11 1.cpp
~$ time ./a.out 

real	0m0.048s
user	0m0.048s
sys	0m0.000s