有人可以帮我解决我的加法器功能吗?我认为这几乎是正确的,我需要帮助知道传递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;
}
答案 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);
}