Tenho que sair em alguns minutos então não pude dar uma olhada aprofundada no seu código, mas algo que eu notei de cara é a falta de padrão ao nomear as variáveis.
Algumas estão em português, outras em inglês. Algumas estão em camelCase, outras em PascalCase e algumas até mesmo em lowercase. Nomear as coisas sem um padrão desse jeito é uma prática ruim porque costuma dar problemas quando o código começa a crescer ou quando você começa a trabalhar em grupo.
Recomendo a você usar a convenção usada na própria STL do C++, ou a convenção que a Google usa para códigos em C++. Claro, sempre tem a opção de vc usar/modificar outra convenção ou até mesmo criar a sua própria, mas é bom que ela seja ao menos consistente e autoexplicativa pra voçê não ter problemas depois. (encare isso como uma critica construtiva)
Se der tempo, de noite eu dou mais uma olhada...