#include <iostream>
#include <array>
#include <vector>
typedef std::vector<int> Vector1D;
typedef std::vector<Vector1D> Vector2D;
typedef std::vector<Vector2D> Vector3D;
typedef std::vector<Vector3D> Vector4D;
typedef std::vector<Vector4D> Vector5D;
typedef std::vector<Vector5D> Vector6D;
typedef std::array<size_t, 6> Path;
bool GetVectorPathElement(Vector6D const &vector6D, Path const &path, int &val)
{
size_t i = 0, k = path[i];
if (vector6D.size() > k)
{
Vector5D const &vector5D = vector6D[k];
k = path[++i];
if (vector5D.size() > k)
{
Vector4D const &vector4D = vector5D[k];
k = path[++i];
if (vector4D.size() > k)
{
Vector3D const &vector3D = vector4D[k];
k = path[++i];
if (vector3D.size() > k)
{
Vector2D const &vector2D = vector3D[k];
k = path[++i];
if (vector2D.size() > k)
{
Vector1D const &vector1D = vector2D[k];
k = path[++i];
if (vector1D.size() > k)
{
val = vector1D[k];
return true;
}
}
}
}
}
}
std::cout << "Invalid path " << k << " at index " << i << std::endl;
return false;
}
int main()
{
Vector1D vector1D = { 1,2,3,4,5,6 };
Vector2D vector2D = { vector1D, vector1D, vector1D, vector1D, vector1D };
Vector3D vector3D = { vector2D, vector2D, vector2D, vector2D };
Vector4D vector4D = { vector3D, vector3D, vector3D };
Vector5D vector5D = { vector4D, vector4D };
Vector6D vector6D = { vector5D };
Path path = { 0,0,2,1,4,5 };
int element;
if (GetVectorPathElement(vector6D, path, element))
{
std::cout << "Path: ";
for (auto i : path)
std::cout << i << " ";
std::cout << "\nElement value at destination: " << element << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0eXBlZGVmIHN0ZDo6dmVjdG9yPGludD4gVmVjdG9yMUQ7CnR5cGVkZWYgc3RkOjp2ZWN0b3I8VmVjdG9yMUQ+IFZlY3RvcjJEOwp0eXBlZGVmIHN0ZDo6dmVjdG9yPFZlY3RvcjJEPiBWZWN0b3IzRDsKdHlwZWRlZiBzdGQ6OnZlY3RvcjxWZWN0b3IzRD4gVmVjdG9yNEQ7CnR5cGVkZWYgc3RkOjp2ZWN0b3I8VmVjdG9yNEQ+IFZlY3RvcjVEOwp0eXBlZGVmIHN0ZDo6dmVjdG9yPFZlY3RvcjVEPiBWZWN0b3I2RDsKdHlwZWRlZiBzdGQ6OmFycmF5PHNpemVfdCwgNj4gUGF0aDsKCmJvb2wgR2V0VmVjdG9yUGF0aEVsZW1lbnQoVmVjdG9yNkQgY29uc3QgJnZlY3RvcjZELCBQYXRoIGNvbnN0ICZwYXRoLCBpbnQgJnZhbCkKewoJc2l6ZV90IGkgPSAwLCBrID0gcGF0aFtpXTsKCWlmICh2ZWN0b3I2RC5zaXplKCkgPiBrKQoJewoJCVZlY3RvcjVEIGNvbnN0ICZ2ZWN0b3I1RCA9IHZlY3RvcjZEW2tdOwoJCWsgPSBwYXRoWysraV07CgkJaWYgKHZlY3RvcjVELnNpemUoKSA+IGspCgkJewoJCQlWZWN0b3I0RCBjb25zdCAmdmVjdG9yNEQgPSB2ZWN0b3I1RFtrXTsKCQkJayA9IHBhdGhbKytpXTsKCQkJaWYgKHZlY3RvcjRELnNpemUoKSA+IGspCgkJCXsKCQkJCVZlY3RvcjNEIGNvbnN0ICZ2ZWN0b3IzRCA9IHZlY3RvcjREW2tdOwoJCQkJayA9IHBhdGhbKytpXTsKCQkJCWlmICh2ZWN0b3IzRC5zaXplKCkgPiBrKQoJCQkJewoJCQkJCVZlY3RvcjJEIGNvbnN0ICZ2ZWN0b3IyRCA9IHZlY3RvcjNEW2tdOwoJCQkJCWsgPSBwYXRoWysraV07CgkJCQkJaWYgKHZlY3RvcjJELnNpemUoKSA+IGspCgkJCQkJewoJCQkJCQlWZWN0b3IxRCBjb25zdCAmdmVjdG9yMUQgPSB2ZWN0b3IyRFtrXTsKCQkJCQkJayA9IHBhdGhbKytpXTsKCQkJCQkJaWYgKHZlY3RvcjFELnNpemUoKSA+IGspCgkJCQkJCXsKCQkJCQkJCXZhbCA9IHZlY3RvcjFEW2tdOwoJCQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CglzdGQ6OmNvdXQgPDwgIkludmFsaWQgcGF0aCAiIDw8IGsgPDwgIiBhdCBpbmRleCAiIDw8IGkgPDwgc3RkOjplbmRsOwoJcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpCnsKCVZlY3RvcjFEIHZlY3RvcjFEID0geyAxLDIsMyw0LDUsNiB9OwoJVmVjdG9yMkQgdmVjdG9yMkQgPSB7IHZlY3RvcjFELCB2ZWN0b3IxRCwgdmVjdG9yMUQsIHZlY3RvcjFELCB2ZWN0b3IxRCB9OwoJVmVjdG9yM0QgdmVjdG9yM0QgPSB7IHZlY3RvcjJELCB2ZWN0b3IyRCwgdmVjdG9yMkQsIHZlY3RvcjJEIH07CglWZWN0b3I0RCB2ZWN0b3I0RCA9IHsgdmVjdG9yM0QsIHZlY3RvcjNELCB2ZWN0b3IzRCB9OwoJVmVjdG9yNUQgdmVjdG9yNUQgPSB7IHZlY3RvcjRELCB2ZWN0b3I0RCB9OwoJVmVjdG9yNkQgdmVjdG9yNkQgPSB7IHZlY3RvcjVEIH07CgoJUGF0aCBwYXRoID0geyAwLDAsMiwxLDQsNSB9OwoJaW50IGVsZW1lbnQ7CgoJaWYgKEdldFZlY3RvclBhdGhFbGVtZW50KHZlY3RvcjZELCBwYXRoLCBlbGVtZW50KSkKCXsKCQlzdGQ6OmNvdXQgPDwgIlBhdGg6ICI7CgkJZm9yIChhdXRvIGkgOiBwYXRoKQoJCQlzdGQ6OmNvdXQgPDwgaSA8PCAiICI7CgoJCXN0ZDo6Y291dCA8PCAiXG5FbGVtZW50IHZhbHVlIGF0IGRlc3RpbmF0aW9uOiAiIDw8IGVsZW1lbnQgPDwgc3RkOjplbmRsOwoJfQoKCXJldHVybiAwOwp9