C++ C++;将列表作为参数传递给函数

C++ C++;将列表作为参数传递给函数,c++,list,pass-by-reference,pass-by-value,C++,List,Pass By Reference,Pass By Value,我正在尝试建立一个非常简单的地址簿。我创建了一个联系人类,地址簿是一个简单的列表。我正在尝试构建一个函数,允许用户将联系人添加到通讯簿中。如果我把代码带到函数之外,它就可以正常工作。然而,如果我把它放进去,它就不起作用了。我相信这是一个通过引用传递和通过值传递的问题,我没有按我应该的方式来处理。这是函数的代码: void add_contact(list<Contact> address_book) { //the local variables to be used to

我正在尝试建立一个非常简单的地址簿。我创建了一个联系人类,地址簿是一个简单的列表。我正在尝试构建一个函数,允许用户将联系人添加到通讯簿中。如果我把代码带到函数之外,它就可以正常工作。然而,如果我把它放进去,它就不起作用了。我相信这是一个通过引用传递和通过值传递的问题,我没有按我应该的方式来处理。这是函数的代码:

void add_contact(list<Contact> address_book)
{
     //the local variables to be used to create a new Contact
     string first_name, last_name, tel;

     cout << "Enter the first name of your contact and press enter: ";
     cin >> first_name;
     cout << "Enter the last name of your contact and press enter: ";
     cin >> last_name;
     cout << "Enter the telephone number of your contact and press enter: ";
     cin >> tel;

     address_book.push_back(Contact(first_name, last_name, tel));
}
void添加联系人(列出地址簿)
{
//用于创建新联系人的局部变量
字符串名、姓、电话;
姓名;
姓名;
电话;
地址簿。推回(联系人(名字、姓氏、电话));
}

我没有收到任何错误,但是当我尝试显示所有联系人时,我只能看到原始联系人。

您正在按值传递
地址簿
,因此会复制您传递的内容,当您离开
添加联系人
的范围时,您的更改将丢失

而是通过引用传递:

void add_contact(list<Contact>& address_book)
void添加联系人(列表和地址簿)

因为您是按值传递列表,所以它被复制,并且新元素被添加到
add\u contact
中的本地副本中

解决方案:通过引用传递

void add_contact(list<Contact>& address_book).
void add_contact(list<Contact>& address_book).
void添加联系人(列表和地址簿)。
无效添加联系人(列表和地址簿)
通过引用传递地址簿。

通过引用传递

void add_contact(list<Contact>& address_book).
void add_contact(list<Contact>& address_book).
void添加联系人(列表和地址簿)。

调用
添加联系人(地址簿)时,未更新
列表地址簿
你好。谢谢你的及时答复。帮了我很多忙!干杯每一个STL DS都是通过值吗?@胡芦:C++作为一种语言,通过值与参考值的关系取决于每个函数,而不是每种类型。