在多个函数之间共享一个向量,我的程序没有按预期工作。

Sharing a vector across multiple functions and my program isn't working as intended.

我目前正在尝试制作一个允许我将字符串添加到字符串向量的小型控制台应用程序,但我遇到了一些问题。虽然这段代码看起来应该可以工作,但由于某种原因,尝试将名称插入名称向量并列出名称向量似乎不起作用。

   #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <vector>

//Add a name to the vector
void AddName(std::vector<std::string> names)
{
    std::string name;

    std::cout << "Enter full name.";
    std::cin.ignore();
    std::getline(std::cin, name);

    names.push_back(name);
}

//List all names within vector
void ListNames(std::vector<std::string> names)
{
    std::vector<std::string>::const_iterator iter;

    for (iter = names.begin(); iter != names.end(); iter++)
    {
        std::cout << *iter << "\n";
    }
}

//Main function
int main()
{
    std::vector<std::string> names;

    int menuChoice = 0;

    do
    {
        std::cout << ("1: Add Name.");

        std::cin >> menuChoice;

        switch (menuChoice)
        {
        case 1:
            AddName(names);
            break;

        case 2:
            ListNames(names);
            break;

        }
    } while (menuChoice != 3);

    std::string barn;
    std::cin >> barn;

    return 0;
}

感谢您的帮助!

您的函数会获取矢量名称的副本,因此在函数 returns 时添加到其中的任何内容都会被丢弃。请改用参考:

void AddName(std::vector<std::string>& names)

您正在复制向量,在 AddName 和 ListName 中创建一个临时实例。你的函数声明应该是 reference

void ListNames(std::vector<std::string>& names);
void AddName(std::vector<std::string>& names);

程序正在制作向量的完整副本。这意味着每个功能中的版本都是独立的。

void ListNames(std::vector<std::string> names)

根据深拷贝参数创建一个新向量。 (可以共享内部对象。

void ListNames(std::vector<std::string> & names)

发送现有矢量,允许对其进行修改。