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

Posted

技术标签:

【中文标题】C++ 将列表作为参数传递给函数【英文标题】:C++ pass list as a parameter to a function 【发布时间】:2012-03-07 08:11:37 【问题描述】:

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

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));

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

【问题讨论】:

调用add_contact(addressBook);list&lt;Contact&gt; addressBook 没有更新 【参考方案1】:

因为您是按值传递列表,因此它被复制,并且新元素被添加到 add_contact 内的本地副本中。

解决方案:通过引用传递

void add_contact(list<Contact>& address_book).

【讨论】:

【参考方案2】:

通过引用传递

void add_contact(list<Contact>& address_book).

【讨论】:

【参考方案3】:

void add_contact(list&lt;Contact&gt; &amp; address_book)通过引用传递通讯录。

【讨论】:

【参考方案4】:

您正在按值传递address_book,因此会复制您传入的内容,当您离开add_contact 的范围时,您的更改将丢失。

改为通过引用传递:

void add_contact(list<Contact>& address_book)

【讨论】:

嗨。感谢您的及时答复。帮了我很多!干杯! 每个STL DS都是按值传递的吗? @Rahul:C++ 作为一门语言有value semantics——按值传递还是按引用传递取决于每个函数,而不是每个类型。

以上是关于C++ 将列表作为参数传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QT 和 C++ 将字符串参数传递给函数

将列表作为参数传递给 Python C 模块?

C++:如何将变量作为参数传递给类构造函数

如何将关键字对作为参数传递给函数中的模块?

将对象作为参数传递给函数

PySpark 将 Dataframe 作为额外参数传递给映射