fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. struct MenuItem
  6. {
  7. std::string name;
  8. std::vector<MenuItem> children;
  9. };
  10.  
  11. void printMenu(const std::vector<MenuItem> &menu, int level);
  12.  
  13. int main(void)
  14. {
  15. std::vector<MenuItem> menu
  16. {
  17. {
  18. {
  19. { "Menu Item 1" },
  20. {
  21. {
  22. { "Item 1.1" },
  23. {
  24. {
  25. { "Item 1.1.1" },
  26. { {} }
  27. },
  28. {
  29. { "Item 1.1.2" },
  30. { {} }
  31. }
  32. }
  33. },
  34. {
  35. { "Item 1.2" },
  36. {
  37. {
  38. { "Item 1.2.1" },
  39. { {} }
  40. },
  41. {
  42. { "Item 1.2.2" },
  43. { {} }
  44. }
  45. }
  46. },
  47. }
  48. },
  49. {
  50. { "Menu Item 2" },
  51. {
  52. {
  53. { "Item 2.1" },
  54. {
  55. {
  56. { "Item 2.1.1" },
  57. { {} }
  58. },
  59. {
  60. { "Item 2.1.2" },
  61. { {} }
  62. }
  63. }
  64. },
  65. {
  66. { "Item 2.2" },
  67. {
  68. {
  69. { "Item 2.2.1" },
  70. { {} }
  71. },
  72. {
  73. { "Item 2.2.2" },
  74. { {} }
  75. }
  76. }
  77. },
  78. }
  79. }
  80. }
  81. };
  82.  
  83. printMenu( menu, 0 );
  84.  
  85. return 0;
  86. }
  87.  
  88. void printMenu(const std::vector<MenuItem> &menu, int level)
  89. {
  90. std::string prefix( level, '\t' );
  91.  
  92. // visiting the next menu level
  93. ++level;
  94.  
  95. for (const auto &item : menu)
  96. {
  97. std::cout << prefix << item.name << std::endl;
  98.  
  99. printMenu( item.children, level );
  100. }
  101. }
Success #stdin #stdout 0s 3240KB
stdin
Standard input is empty
stdout
Menu Item 1
	Item 1.1
		Item 1.1.1
			
		Item 1.1.2
			
	Item 1.2
		Item 1.2.1
			
		Item 1.2.2
			
Menu Item 2
	Item 2.1
		Item 2.1.1
			
		Item 2.1.2
			
	Item 2.2
		Item 2.2.1
			
		Item 2.2.2