循环向量不起作用::向量下标超出范围[重复]
Posted
技术标签:
【中文标题】循环向量不起作用::向量下标超出范围[重复]【英文标题】:Vector for loop isn't working:: vector subscript out of range [duplicate] 【发布时间】:2017-10-08 16:21:51 【问题描述】:这里的目标 == 我正在尝试将字符串值 push_back 到向量中......出现诸如(向量下标超出范围)之类的问题
我已经创建了一个接受字符串向量作为参数的函数
我在该函数中创建了一个 for 循环,利用一个变量与一个 'cin' 函数相结合
我得到的只是'向量下标超出范围'......如何?我错过了什么吗?
#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");
【问题讨论】:
Read a good beginners book or two,并了解按值传递参数或按引用传递参数的区别。 如果您要更改作为参数传递给函数的任何内容,请通过引用传递。 【参考方案1】:改变这个:
void sentDef(std::vector <std::string> sentienceVar)
到这里:
void sentDef(std::vector <std::string>& sentienceVar)
现在您的向量通过引用传递,因此保留了对其所做的更改。
在您的代码中,它是按值传递的(因此它的一个副本被传递给函数。该函数对该副本进行操作,并且在该函数的末尾,该副本超出了范围)。
【讨论】:
大声笑当然xD总是那些小错误......现在这让我更认真地对待我的老师,因为他们说一些最大的错误可能是我们忽略的最小的事情哈哈 @thundergawd 你应该听到你的老师的声音! @gsamaras 请停止回答这些离题问题。他们有一个密切的原因。也更好地了解骗子!【参考方案2】:要扩展@gsamars,请在谷歌上通过复制和引用传递参数。
您在函数中所做的是接受向量的副本,因此当函数返回时原始sentiencevar
为空!
在类型之后添加 & 告诉编译器您要通过引用传递,因此您创建的函数会影响原始向量。请注意,这也比创建副本更快。
【讨论】:
我知道,它只是被忽视得太严重了,没有意识到这一点,有点像我们有时会忘记';'在某行的末尾。谢谢以上是关于循环向量不起作用::向量下标超出范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章