Как сопоставить несколько результатов, используя std :: regex

например. Если у меня есть строка типа «первый второй третий четвертый», и я хочу сопоставить каждое отдельное слово в одной операции, чтобы вывести их по одному.

Я просто думал, что "(\ b \ S * \ b) {0,}" будет работать. Но на самом деле это не так.

Что я должен делать?

Вот мой код:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    regex exp("(\\b\\S*\\b)");
    smatch res;
    string str = "first second third forth";
    regex_search(str, res, exp);
    cout << res[0] <<" "<<res[1]<<" "<<res[2]<<" "<<res[3]<< endl;
}   

Я с нетерпением жду вашей любезной помощи. :)