fork download
  1. #include <iostream>
  2. #include <array>
  3. #include <vector>
  4.  
  5. typedef std::vector<int> Vector1D;
  6. typedef std::vector<Vector1D> Vector2D;
  7. typedef std::vector<Vector2D> Vector3D;
  8. typedef std::vector<Vector3D> Vector4D;
  9. typedef std::vector<Vector4D> Vector5D;
  10. typedef std::vector<Vector5D> Vector6D;
  11. typedef std::array<size_t, 6> Path;
  12.  
  13. bool GetVectorPathElement(Vector6D const &vector6D, Path const &path, int &val)
  14. {
  15. size_t i = 0, k = path[i];
  16. if (vector6D.size() > k)
  17. {
  18. Vector5D const &vector5D = vector6D[k];
  19. k = path[++i];
  20. if (vector5D.size() > k)
  21. {
  22. Vector4D const &vector4D = vector5D[k];
  23. k = path[++i];
  24. if (vector4D.size() > k)
  25. {
  26. Vector3D const &vector3D = vector4D[k];
  27. k = path[++i];
  28. if (vector3D.size() > k)
  29. {
  30. Vector2D const &vector2D = vector3D[k];
  31. k = path[++i];
  32. if (vector2D.size() > k)
  33. {
  34. Vector1D const &vector1D = vector2D[k];
  35. k = path[++i];
  36. if (vector1D.size() > k)
  37. {
  38. val = vector1D[k];
  39. return true;
  40. }
  41. }
  42. }
  43. }
  44. }
  45. }
  46. std::cout << "Invalid path " << k << " at index " << i << std::endl;
  47. return false;
  48. }
  49.  
  50. int main()
  51. {
  52. Vector1D vector1D = { 1,2,3,4,5,6 };
  53. Vector2D vector2D = { vector1D, vector1D, vector1D, vector1D, vector1D };
  54. Vector3D vector3D = { vector2D, vector2D, vector2D, vector2D };
  55. Vector4D vector4D = { vector3D, vector3D, vector3D };
  56. Vector5D vector5D = { vector4D, vector4D };
  57. Vector6D vector6D = { vector5D };
  58.  
  59. Path path = { 0,0,2,1,4,5 };
  60. int element;
  61.  
  62. if (GetVectorPathElement(vector6D, path, element))
  63. {
  64. std::cout << "Path: ";
  65. for (auto i : path)
  66. std::cout << i << " ";
  67.  
  68. std::cout << "\nElement value at destination: " << element << std::endl;
  69. }
  70.  
  71. return 0;
  72. }
Success #stdin #stdout 0s 4364KB
stdin
Standard input is empty
stdout
Path: 0 0 2 1 4 5 
Element value at destination: 6