мне нужно вывести элементы вектора, который возвращает функция. и использовать цикл for by collection а код выделенный тире, дает ошибку

/*
Задание 1
Поэкспериментируйте с вызовом функции SplitIntoWords,
оторая принимает строку по константной ссылке.
Передайте в неё текст test search query и выведите полученные
слова в квадратных скобках.
Вызовите SplitIntoWords("test search query"s)
 и пройдитесь по результату циклом for, выводя квадратные скобки
 вокруг каждого слова. Получится [test] [search] [query].

*/
#include <iostream>
#include <string>
#include <vector>

using namespace std;


vector<string> SplitIntoWords(const string &text) {
        vector<string> words;
        string word;
        for (char c : text) {
                if (c == ' ') {
                        words.push_back(word);
                        word = "";
                } else {
                        word += c;
                        cout <<  "word  " <<word<<endl;
                }
        }
        words.push_back(word);
cout <<  "words  " <<word<<endl;
        return words;
}

int main() {
vector<string> words1 ={};    string word1;
words1=SplitIntoWords("test search query"s);
cout <<  "word1  " <<word1<<endl;
cout<<"SplitIntoWords  " <<SplitIntoWords;
//----------------------------- the error part -------------------------------------
for (string c1 : SplitIntoWords) {

                        cout<<"word1"<<c1<<endl;

                }
/*
the problem is that i don't understand how to use const refeference for function output
|42|error: no matching function for call to 'begin(std::vector<std::__cxx11::basic_string<char> > (&)(const std::__cxx11::basic_string<char>&))'|
*/
//----------------------------the end of error --------------------------------------
}


я знаю, как вывести элементы вектора если бы это был просто вектор. проблема в том, что я не могу разобраться с тем, что из условий задания надо по константной ссылке надо получить то, что возвращает функция.


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

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

Я не смотрел вашу функцию разбивки на слова, но главное - она возвращает коллекцию vector<string>, и вы так и пишете:

vector<string> words1 ={};    
string word1;   // Не понимаю, зачем
words1=SplitIntoWords("test search query"s);  // Вот, получили коллекцию

// Зачем выводить пустую строку - не понимаю, но хотите - делайте
cout <<  "word1  " <<word1<<endl;

// Вы выводите адрес функции? Опять же - как хотите...
cout<<"SplitIntoWords  " <<SplitIntoWords;

// Но здесь вы же должны раотать с коллекцией, а не адресом функции:
for (string c1 : SplitIntoWords)

Так работайте же с коллекцией:

for (string c1 : words1)

или

for (string c1 : SplitIntoWords("test search query"s))
→ Ссылка