Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <chrono>
  4.  
  5. std::vector<int> getDiag(const std::vector<std::vector<int>>& mat)
  6. {
  7. if(mat.size() != mat[0].size()) return {};
  8.  
  9. std::vector<int> ret;
  10. ret.reserve(mat.size());
  11.  
  12. for(auto i = 0; i < mat.size(); ++i)
  13. {
  14. for(auto j = 0; j < mat[0].size(); ++j)
  15. {
  16. if(i == j) ret.emplace_back(mat[i][j]);
  17. }
  18. }
  19.  
  20. return ret;
  21. }
  22.  
  23. std::vector<int> getDiag(const int nr, const int nc, const std::vector<int>& mat)
  24. {
  25. if(nr != nc) return {};
  26.  
  27. std::vector<int> ret;
  28. ret.reserve(nr);
  29.  
  30. int c = 0;
  31. for(auto i = c; i < mat.size(); ++c, i+=nc)
  32. ret.emplace_back(mat[i + c]);
  33.  
  34. return ret;
  35. }
  36.  
  37. void printVect(const std::vector<int>& vec)
  38. {
  39. for(auto v : vec)
  40. std::cout << v << "\t";
  41. std::cout << "\n";
  42. }
  43.  
  44. void print(const std::vector<std::vector<int>>& mat)
  45. {
  46. for(auto i = 0; i < mat.size(); ++i)
  47. printVect(mat[i]);
  48. }
  49.  
  50. int main(int argc, char* argv[])
  51. {
  52. if(argc != 2)
  53. {
  54. std::cerr << "ERROR: Try ./exe <matSize>\n";
  55. return -1;
  56. }
  57.  
  58. int size = std::atoi(argv[1]);
  59. int nr = size, nc = size;
  60. std::vector<std::vector<int>> mat;
  61. std::vector<int> matPlain;
  62.  
  63. for(auto i = 0; i < nr*nc; ++i)
  64. matPlain.push_back(i);
  65.  
  66. mat.resize(nr);
  67. for(auto i = 0, aux = 0; i < nr; ++i)
  68. {
  69. mat[i].resize(nc);
  70. for(auto j = 0; j < nc; ++j, aux++)
  71. {
  72. mat[i][j] = aux;
  73. }
  74. }
  75.  
  76.  
  77. // std::cout << "matPlain\n";
  78. // printVect(matPlain);
  79. // std::cout << "--------\n";
  80.  
  81. // std::cout << "Mat\n";
  82. // print(mat);
  83. // std::cout << "--------\n";
  84.  
  85. std::cout << "Diag\n";
  86. auto st1 = std::chrono::steady_clock::now();
  87. auto d1 = getDiag(mat);
  88. auto ed1 = std::chrono::steady_clock::now();
  89. // printVect(d1);
  90. std::cout << "Time: " << std::chrono::duration_cast<std::chrono::milliseconds>(ed1 - st1).count() << "\n";
  91. std::cout << "--------\n";
  92.  
  93. std::cout << "Diag plain\n";
  94. auto st2 = std::chrono::steady_clock::now();
  95. auto d2 = getDiag(nr, nc, matPlain);
  96. auto ed2 = std::chrono::steady_clock::now();
  97. std::cout << "Time: " << std::chrono::duration_cast<std::chrono::milliseconds>(ed2 - st2).count() << "\n";
  98. // printVect(d2);
  99. std::cout << "--------\n";
  100.  
  101. return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement