
Indicators é um projeto que dispõe código pronto para você implementar ao criar barras de progresso no terminal.
single_include.Para implementar uma barra de progresso em seu aplicativo, inclua indicators/progress_bar.hpp e crie um objeto ProgressBar. Esta é a estrutura geral de uma barra de progresso:
{prefix} {start} {fill} {lead} {remaining} {end} {percentage} [{elapsed}<{remaining}] {postfix}
         ^^^^^^^^^^^^^ Bar Width ^^^^^^^^^^^^^^^A quantidade de progresso em ProgressBar é mantida como um size_t no intervalo [0, 100]. Quando o progresso chega a 100, a progressão está concluída.
No código no nível do aplicativo, existem duas maneiras de atualizar esse progresso:
Progresso de atualização usando bar.tick()

#include <indicators/progress_bar.hpp>
#include <thread>
#include <chrono>
int main() {
  using namespace indicators;
  ProgressBar bar{
    option::BarWidth{50},
    option::Start{"["},
    option::Fill{"="},
    option::Lead{">"},
    option::Remainder{" "},
    option::End{"]"},
    option::PostfixText{"Extracting Archive"},
    option::ForegroundColor{Color::green},
    option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
  };
  // Update bar state
  while (true) {
    bar.tick();
    if (bar.is_completed())
      break;
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
  }
  return 0;
}



Se você tiver uma iso de por exemplo 5GB e deseja copiar para outro diretório, o código seria;
#include <indicators/indeterminate_progress_bar.hpp>
#include <indicators/cursor_control.hpp>
#include <atomic>
#include <filesystem>
#include <thread>
#include <chrono>
namespace fs = std::filesystem;
int main() {
  // Configure an indeterminate progress bar
  indicators::IndeterminateProgressBar bar{
      indicators::option::BarWidth{40},
      indicators::option::Start{"["},
      indicators::option::Fill{"·"},
      indicators::option::Lead{"<==>"},
      indicators::option::End{"]"},
      indicators::option::PostfixText{"Copying file..."},
      indicators::option::ForegroundColor{indicators::Color::yellow},
      indicators::option::FontStyles{
          std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}
  };
  indicators::show_console_cursor(false);
  // Setup a file copy job to run in a separate thread
  auto copyfile_job = [&bar]() {
    const std::string src = "/home/marcos/5GB.iso";
    const std::string dst = "/home/marcos/Downloads/5GB.iso";
    try {
        auto done = fs::copy_file(src, dst, fs::copy_options::overwrite_existing);
        if (done) {
            std::cout << termcolor::bold << termcolor::green 
                << "Copy completed\n" << termcolor::reset;
        } 
        else {
            std::cout << termcolor::bold << termcolor::red 
                << "Copy failed\n" << termcolor::reset;
        }
    }
    catch (std::exception& e) {
        std::cout << e.what() << "\n";
    }
    // When the job is done, mark the progress bar as completed
    bar.mark_as_completed();
  };
  std::thread copyfile_job_completion_thread(copyfile_job);
  // Update bar state and wait for copy to complete
  while (!bar.is_completed()) {
    bar.tick();
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
  }
  copyfile_job_completion_thread.join();
  
  indicators::show_console_cursor(true);  
  return 0;
}
// indicators e compilando seu códigoBasta clonar e usar o CMake Make
igit clone https://github.com/p-ranav/indicators
cd indicators
mkdir build && cd build
cmake -DINDICATORS_SAMPLES=ON -DINDICATORS_DEMO=ON ..
make
cd
vim copia.cpp
g++ -pthread -std=c++17 copia.cpp