为什么我无法使用push_back功能?

Why can't I use push_back function?

本文关键字:back 功能 push 为什么      更新时间:2023-10-16
void Add(vector< vector<string> > &name,
vector< vector<string> > &author,
vector< vector<string> > &pub,
int &total_books)
{
Line();
string book_name,book_author,book_pub;
cout << "Please enter the book name: ";
cin >> book_name;
cout << "Please enter the author name: ";
cin >> book_author;
cout << "Please enter the publisher name: ";
cin >> book_pub;
name.push_back(book_name);
author.push_back(book_author);
pub.push_back(book_pub);
++total_books;
cout << "The book has been successfully added.";
}

编译器是这样说的:

[Error] no matching function for call to
'std::vector<std::vector<std::basic_string<char> >>::push_back(std::string&)'**

有人知道问题出在哪里吗?

对于std::vector<std::vector<string> >,您需要push_backstd::vector<string>的实例。

例:

std::vector<string> many_strings;
std::vector<std::vector<string> > matrix_of_strings;
many_strings.push_back("Sid");
many_strings.push_back("Alice");
many_strings.push_back("Bob");
matrix_of_strings.push_back(many_strings);

在您的情况下,更好的解决方案是使用字段创建结构,而不是使用并行向量

struct Book
{
std::string title;
std::string author;
std::string publisher;
};

然后,您可以添加输入函数:

struct Book
{
//...
void input_from_user();
};
void Book::input_from_user()
{
std::cout << "Enter book title: ";
std::getline(title);
std::cout << "Enter book author: ";
std::getline(author);
std::cout << "Enter book publisher: ";
std::getinle(publisher);
}

您的输入过程可能如下所示:

Book b;
b.input_from_user();

您的数据库将如下所示:

std::vector<Book> database;
database.push_back(b);

你的变量是向量的向量 (vector<vector<string> > &name(,这似乎是一个层次到深度 - 你不能push_backstring到这些,而只能是字符串的向量。

你想用这个实现什么?为什么不简单地使用vector<string> &name,这应该可以正常工作?

当然,您正在尝试将字符串推送到向量向量中。

首先,为什么这些矢量是两层的?如果将它们更改为vector<string>则不需要其他更改(在此片段中(。

void Add(vector<string> &name, vector<string> &author, vector<string> &pub);

接下来,如果由于某种原因您仍然需要它们是双层的,那么,您可以将新字符串作为单例插入:

name.push_back({book_name});

(在旧标准中可能需要更详细:

author.push_back(vector<string>(1, book_author));

或者将它们添加到 Vector 的最新元素中:

pub.back().push_back(book_pub);

也许,在后一种情况下,您首先需要检查大向量是否不为空,因此有一个back()

从您的代码段中不清楚您要实现的目标。