Сравните быстродействие трех функций complete_name() из параграфа 20.3.9 и параграфа 20.3.10. Попробуйте сами написать функцию complete_name(), работающую наиболее производительно. Ведите список ошибок, выявленных на этапах программирования и тестирования.
Сравнил я эти функции, это функции для работы со строками, они принимают две строки и возвращают третью. Каждая функция делает это по разному, одна добавляет в конец используя функцию operator+=, друкая использует конкатенацию строк, третья использует функцию insert короче с помощью вставки добавляет.
В общем оказалось быстрее всего работает добавление в конец, потом следует операция конкатенация и само медленнее работает вставка.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#include <iostream> using std::cout; using std::endl; #include <string> using std::string; #include <ctime> string complete_name(const string& first_name,const string& family_name) { string s=first_name; s+=' '; s+=family_name; return s; } string complete_name2(const string& first_name,const string& family_name) //плохой алгоритм { string s=family_name; s.insert(s.begin(),' '); return s.insert(0,first_name); } string complete_name3(const string& first_name,const string& family_name) { return first_name+' '+family_name; } int main() { clock_t begin, end; double time_spent; begin = clock(); string s="Vas9"; string s2="Petrov"; for(int i=0;i<1000;i++) complete_name(s,s2); end = clock(); time_spent = (double)(end - begin) / CLOCKS_PER_SEC; cout<<"Executed in 1 "<<time_spent; cout <<endl; begin = clock(); for(int i=0;i<1000;i++) complete_name2(s,s2); end = clock(); time_spent = (double)(end - begin) / CLOCKS_PER_SEC; cout<<"Executed in 2 "<<time_spent; cout <<endl; begin = clock(); for(int i=0;i<1000;i++) complete_name3(s,s2); end = clock(); time_spent = (double)(end - begin) / CLOCKS_PER_SEC; cout<<"Executed in 3 "<<time_spent; cout <<endl; return 0; } |
[youtube]http://www.youtube.com/watch?v=JCv2kveuE3A[/youtube]