Вывести индексы всех пробелов строки

Нужно вывести индексы всех пробелов и отдельно обработать конец строки. Без обработки конца строки, как можно реализовать? (только начинающий, с алгоритмом проблемы) Пример: green parrot, должен выдавать 5 6 13. При работе данного кода, выдает 5 6 Имеется код:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string query;
    getline(cin, query);

    for (int i = 0; i <= query.size(); ++i) {
        if (query[i] == ' ') {
            cout << i << endl;
        }
    }
}

Ответы (3 шт):

Автор решения: MBo

Так?

for (int i = 0; i <= query.size(); ++i) {
        if (i == query.size()  ||  query[i] == ' ') {
            cout << i << endl;
        }
    }
→ Ссылка
Автор решения: Maggot

Ну можно повыпендироваться и написать лямбду с мьютбл и бешать по ней - почему пишу так - более унифицирвоанно чем просто for но тащить больше хедеров... ждем модули

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
 
int main() {
  std::string line {"a test line"};
  auto f{[i{0}](unsigned char ch) mutable {if (std::isspace(ch)) {std::cout << i << std::endl;} i++;}};
  std::for_each(std::begin(line), std::end(line), f);
  return 0;
}
→ Ссылка
Автор решения: EOF

Вот ещё вариант:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string query;
    getline(cin, query);

    size_t pos = query.find(' ');         // Находим первый пробел и сохраняем его индекс
    while (pos != string::npos)           // Если пробел в строке есть
    {
        cout << pos << '\t';              // Выводим индекс
        pos = query.find(' ', pos + 1);   // Ищем следующий пробел
    }
    cout << query.size() << endl;         // А вот и конец строки

    return 0;
}
→ Ссылка