мне нужно вывести элементы вектора, который возвращает функция. и использовать цикл 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))