Historically, Qt used to provide functions which were direct equivalents of many STL algorithmic functions. Starting with Qt 5.0, you are instead encouraged to use directly the implementations available in the STL; most of the Qt ones have been deprecated (although they are still available to keep the old code compiling).
Я таки возьму QThread.. сигнал-слоты довольно удобные получаются и если следовать http://doc.qt.io/qt-5/threads-technologies.html и сделать QObject worker, то получается как бы отделение логики треда в отдельный класс.
открою тебе секрет: никакого асинхронного выполнения на софтовом уровне нет. настоящая асинхронная работа - это прерывания от железа. и на этом, собственно, всё. остальное - надстройки над тредами в кернеле или в библиотеках.
в пользу второго - есть сигналы. я на них запилил opengl рендерер в паралельном потоке где ему приходят указатели на класс, который хочет порисовать, там вызывается paint, ставится GLsync, и как только sync отстрелялся, сигналом сообщают что класс «готов».
с std::thread надо самому колхозить передачу данных в поток и обратно. а это муторно. тем более что qt уже используется.