fork(2) download
  1. #include <algorithm>
  2. #include <ctime>
  3. #include <iostream>
  4. #include <iterator>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. vector<int> createArrays() {
  10. vector<int> result(rand() % 13);
  11.  
  12. generate(result.begin(), result.end(), rand);
  13.  
  14. return result;
  15. }
  16.  
  17. vector<int> test1(const vector<int>& testValues1, const vector<int>& testValues2) {
  18. vector<int> result(testValues1.size() * testValues2.size());
  19.  
  20. for_each(begin(result), end(result), [&, it = 0U](auto& i) mutable {
  21. i = testValues1[it / testValues2.size()] + testValues2[it % testValues2.size()];
  22. ++it;
  23. });
  24.  
  25. return result;
  26. }
  27.  
  28. vector<int> test2(const vector<int>& testValues1, const vector<int>& testValues2) {
  29. vector<int> result(testValues1.size() * testValues2.size());
  30. auto i = begin(result);
  31.  
  32. std::for_each(cbegin(testValues1), cend(testValues1), [&](const auto& A) { std::for_each(cbegin(testValues2), cend(testValues2), [&](const auto& B) { *i++ = A + B; }); });
  33. return result;
  34. }
  35.  
  36.  
  37. int main() {
  38. clock_t start;
  39. clock_t total1 = 0;
  40. clock_t total2 = 0;
  41. auto first = &test1;
  42. auto second = &test2;
  43.  
  44. srand(static_cast<unsigned int>(time(nullptr)));
  45.  
  46. for (auto i = 0; i < 100; ++i) {
  47. auto testValues1 = createArrays();
  48. auto testValues2 = createArrays();
  49.  
  50. start = clock();
  51. const auto result1 = first(testValues1, testValues2);
  52. total1 += clock() - start;
  53.  
  54. start = clock();
  55. const auto result2 = second(testValues1, testValues2);
  56. total2 += clock() - start;
  57.  
  58. if (!equal(cbegin(result1), cend(result1), cbegin(result2), cend(result2))) {
  59. cout << "MISMATCH\n";
  60. break;
  61. }
  62.  
  63. swap(total1, total2);
  64. swap(first, second);
  65. }
  66. cout << "Test1: " << total1 << endl << "Test2: " << total2 << endl;
  67. }
Success #stdin #stdout 0s 3416KB
stdin
Standard input is empty
stdout
Test1: 81
Test2: 53