Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

peter.gaydeek avatar peter.gaydeek 2 Точки

C++ Advanced - 04.Tree. getTreeView функцията

Колеги моля ви се какво трябва да правя с тази функция "std::string getTreeView(std::vector<std::shared_ptr<FileSystemObject>> rootObjects)" от 4 задачка от домашното...нещо не мога да я схвана може ли някой да ми обясни какво точно трябва да се направи?? 

Тагове:
0
C++ Advanced
j.petrov_90 avatar j.petrov_90 373 Точки

Привет,

Една от най-често използваните структури данни в света е дървото (tree на английски).

Ако ти е интересно можеш да прочетеш тази статия:
https://www.tutorialspoint.com/data_structures_algorithms/tree_data_structure.htm

Ако не ти се чете:
То поне виж какво представлява дървото като картинка.
Всяко дърво си има корен (най-горния елемент).
Като работим с дървета винаги държим връзка към корена му(защото от него можем да достигнем до всеки един друт елемент на дървото).

Файловите системи се реализират като дърво.

В задачата фунцията:
std::string getTreeView(std::vector<std::shared_ptr<FileSystemObject>> rootObjects)
за която питаш: има за цел да "нарисува" дърветата каго ги напълни в един std::string.
Как точно става това? -> описано е във задачата.

Обърни внимание, че функцията ти комбинира няколко файлови дървета в един std::string.

Поздрави

 

1
peter.gaydeek avatar peter.gaydeek 2 Точки

Привет,

 

Благодаря за инфото, написах кода, но имам само 1 проблем...не иска да влезе във [Shortcut] и само ми изписва името като папка

и след това отива на следващата, а самите неща които са shortcut не ми ги изкарва... ще напиша само как започнах кода за да не си изпращам цялото решение :

std::string getTreeView(std::vector<std::shared_ptr<FileSystemObject>> rootObjects)
{
    for (size_t i = 0; i < rootObjects.size(); i++)
    {
        std::shared_ptr<FileSystemObject> currPtr = rootObjects[i];
        std::shared_ptr<Directory> directory = std::dynamic_pointer_cast<Directory>(currPtr);
...........

}

 

как мога да изкарам Shortcut-ите ? Ако може малко помощ : )

 

П.П.

Много е вероятно пак да не съм задал въпроса както трябва, но явно не ме бива в тези неща :D

извинявам се за което !

Поздрави! 

0
j.petrov_90 avatar j.petrov_90 373 Точки

Привет,

Правилно подхождаш.
Не ти "влиза" в shortcut-ите, защото не му казваш да "влиза".
- Това няма как да стане на 1 стъпка, а става на няколко.
- Обхождаш всичко на моментното ниво;
- "Влизаш" надолу във всяка папка и повтаряш горната стъпка;
- Повтаряш докато не остат файлове/папки.

Подсказка:
Това обикновенно се прави с рекурсия.

Малко жокери можеш до ползваш и темата на колегата за същата задача:
https://softuni.bg/forum/26204/09-cplusplus-oop-pure-virtual-members-and-multiple-inheritance-task-4-tree

Само внимавай, че теб те пренасочвам натам, а него го пренасочвам на тук. Да не стане някоя безкрайна рекурсия и да гръмне със stack overflow :)

Поздрави

0
peter.gaydeek avatar peter.gaydeek 2 Точки

Привет отново,

 

май не се разбрахме. Проблема ми е че когато кастна това:

 std::shared_ptr<Directory> directory = std::dynamic_pointer_cast<Directory>(currPtr); ми връща nullptr на Shortcuts това означава, че не мога да "влезна" по навътре! 
Ето какво ми принтира за по-добро обяснение :


[shortcuts]
examples
--->example.txt
--->nested
--->--->noDot
--->--->otherFile.txt
rootDir
rootFile.txt

Въпросът ми е дали бъркам някъде във getTreeView функцията или някъде другаде. Класа Directory ми наследява FileSystemObject и FileSystemObjectsContainer каквито наследява и класа Shortcut. За момент си помислих да не е от там, но няма как понеже ако е друго програмата гърми. Не мога да кастна std::dynamic_pointer_cast към Shortcuts понеже конструктора не позволява...къде бъркам не мога да разбера :( 
Когато започна да дебъгвам проверявам да не би преди да влезе във функцията getTreeView  да липсват елементите във Shortcuts, но всичко е там ...използвам рекурсия в задачата.

 

Поздрави!

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.