如何引用向量作为参数

时间:2014-06-04 23:37:15

标签: c++ function vector

有人可以帮我解决我的加法器功能吗?我认为这几乎是正确的,我需要帮助知道传递myVector的正确方法,我不知道该怎么做。提前谢谢!

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

std::vector<std::string> Adder(std::vector<std::string> myVector);

int main()
{
    std::vector<std::string> inventory;
    std::vector<std::string>::iterator myIter;

    inventory.push_back("sword");
    inventory.push_back("bow");
    inventory.push_back("shield");
    inventory.push_back("armor");

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

    Adder(inventory);

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

    return 0;
}


std::vector<std::string> Adder(std::vector<std::string> myVector)
{
    std::string prompt;

    std::cout << "Enter a new item to add to your inventory: ";
    std::cin >> prompt;

    myVector.insert(myVector.begin(), prompt);

    return myVector;
}

2 个答案:

答案 0 :(得分:3)

std::vector<std::string> Adder(std::vector<std::string> myVector);

您的Adder函数按值vector获取。这意味着vector的副本会传递给此函数,而main()中的副本显然无法看到您所做的任何修改。

您应该将功能更改为:

void Adder(std::vector<std::string>& myVector);

现在通过引用引用该参数,您对原始对象所做的任何修改都将被创建。


另一种选择是保持函数不变,并将vector中的main()替换为函数返回的值。

std::vector<std::string> inventory;
// ... stuff

inventory = Adder(inventory); // the original is replaced with the return value

// rest of your code

在你的情况下,我更喜欢第一种方法。

答案 1 :(得分:0)

在声明方法时使用Adder(std::vector<std::string> &myVector),因此它将使用向量的引用而不是您正在执行的副本。

当你不使用&amp;只有副本获得新值。你也可以使用指针

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
void Adder(std::vector<std::string> &myVector);

int main()
{
    std::vector<std::string> inventory;
    std::vector<std::string>::iterator myIter;
    inventory.push_back("sword");
    inventory.push_back("bow");
    inventory.push_back("shield");
    inventory.push_back("armor");
    for (myIter = inventory.begin(); myIter != inventory.end(); myIter++)
        std::cout<<*myIter<<"\n";

    Adder(inventory);

    for (myIter = inventory.begin(); myIter != inventory.end(); myIter++)
        std::cout<<*myIter<<"\n";

    return 0;
}

void Adder(std::vector<std::string> &myVector)
{
    std::string prompt;
    std::cout<<"Enter a new item to add to your inventory: ";
    std::cin>>prompt;

    myVector.insert(myVector.begin(), prompt);
}