矢量for循环不起作用::矢量下标超出范围

时间:2017-10-08 16:21:52

标签: c++ function vector runtime-error

这里的目标==我正在尝试将一个字符串值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");

    }

2 个答案:

答案 0 :(得分:4)

改变这个:

void sentDef(std::vector <std::string> sentienceVar)

到此:

void sentDef(std::vector <std::string>& sentienceVar)

现在,您的向量通过引用传递,从而保留对其所做的更改。

在你的代码中,它是通过值传递的(因此它的副本被传递给函数。函数在该副本上运行,并且在该函数的末尾,该副本超出了范围)。

答案 1 :(得分:1)

要扩展@gsamars,请通过副本和引用谷歌传递参数。

您在函数中所做的是接受向量的副本,因此当函数返回时原始sentiencevar为空!

在类型之后添加&amp; 会告诉编译器您希望通过引用传递,因此您对该函数的影响会影响原始向量。请注意,这也比创建副本更快。