这里的目标==我正在尝试将一个字符串值push_back到一个向量中....出现问题,例如(向量下标超出范围)
我做了一个接受字符串向量作为参数的函数
我在该函数中使用变量和'cin'函数
进行了for循环所有我回来的是'矢量下标超出范围'......怎么样?我错过了什么吗?
#include <iostream>
#include <vector>
#include <string>
void sentDef(std::vector <std::string> sentienceVar) {
std::string terms;
std::cout << "input how many terms/variables made" << std::endl;
int howManyVar;
std::cin >> howManyVar;
for (int i = 0; i < howManyVar; i++) {
std::cin >> terms;
sentienceVar.push_back(terms);
}
}
int main() {
std::vector <std::string> sentienceVar;
sentDef(sentienceVar);
std::cout << sentienceVar[0] << std::endl;
system("pause");
}
答案 0 :(得分:4)
改变这个:
void sentDef(std::vector <std::string> sentienceVar)
到此:
void sentDef(std::vector <std::string>& sentienceVar)
现在,您的向量通过引用传递,从而保留对其所做的更改。
在你的代码中,它是通过值传递的(因此它的副本被传递给函数。函数在该副本上运行,并且在该函数的末尾,该副本超出了范围)。
答案 1 :(得分:1)
要扩展@gsamars,请通过副本和引用谷歌传递参数。
您在函数中所做的是接受向量的副本,因此当函数返回时原始sentiencevar
为空!
在类型之后添加&amp; 会告诉编译器您希望通过引用传递,因此您对该函数的影响会影响原始向量。请注意,这也比创建副本更快。