Как сохранить данные вектора после выхода из функции?
struct Book{
string title;
string author;
int year;
};
struct Library{
vector <Book> sp;
};
void search(Library l, string b){
for(int i=0;i<l.sp.size();i++){
if(l.sp[i].title==b){
cout<<"Назва книги"<<l.sp[i].title<<"\nЇї автор: "<<l.sp[i].author<<"\nЇї рік написання: "<<l.sp[i].year<<endl;
}
}
}
void writel(Library l, const Book &b){
l.sp.push_back(b);
}
void printl(Library l){
for(int i;i<l.sp.size();i++){
cout<<"Назва книги"<<l.sp[i].title<<"\nЇї автор: "<<l.sp[i].author<<"\nЇї рік написання: "<<l.sp[i].year<<endl;
}
}
int main(){
setlocale(LC_ALL,"Ukrainian");
Library mylib;
Book mybook;
int action=0;
while(action!=3){
cout<<"Напишіть свою дію у цифрах(0 - Додавання книги у бібліотеку, 1 - пошук книги по назві, 2 - вивід списку книг, 3 - вихід): "<<endl;
cin>>action;
if(action==0){
cout<<"Напишіть спочатку назву книги, потім через ентер її автора, потім рік написання: "<<endl;
cin>>mybook.title;
cin>>mybook.author;
cin>>mybook.year;
writel(mylib,mybook);
}
if (action==1){
string name;
cout<<"Напишіть назву книги яку шукаєте: "<<endl;
cin>>name;
search(mylib,name);
}
if (action==2){
printl(mylib);
}
}
system("pause");
return 0;
}
Мне надо чтобы вектор в функции writel нормально сохранял и потом не удалялся, чтобы можно было вывести всё что в нём находится. Помогите пожалуйста.
Ответы (1 шт):
Автор решения: isnullxbh
→ Ссылка
У Вас функция writel
принимает аргумент l
по значению - это значит, что здесь:
writel(mylib,mybook);
будет вызван конструктор копирования, и внутри writel
Вы уже будете работать не с mylib
, а с его копией. Соответственно, все изменения будут касаться только этой копии, на состоянии объекта mylib
это никак не отразится.
Чтобы исправить эту ошибку, достаточно передавать l
по ссылке или указателю:
void writel(Library& l, const Book &b)
{
l.sp.push_back(b);
}