矢量下标超出范围问题

时间:2016-07-16 01:59:48

标签: c++ oop debugging vector

我有一个代码块,我声明了四个向量,初始化其中两个。然后我有两个for循环,我将元素添加到未初始化的向量。最后,我将一个向量的所有元素重新分配给另一个向量。

但是在做这些时我得到了这个错误 - “矢量下标超出范围”。我正在对我做错的载体进行任何操作吗?

我的代码:

int main()
{
    std::vector<int> K;
    K.insert(K.begin(),0);
    std::vector<int> tempK;
    std::vector<int> S;
    S.insert(S.begin(),0);
    std::vector<int> tempS;
    int n;
    float exptd = 0;
    float SD = 0;
    std::cout<<"How many steps: ";
    std::cin >> n;
    for (int j= 1; j<=n; j++) {
        for (int i=1; i<=K.size(); i++) { 
            if (K[i] == 0) {
                tempK.push_back(4); tempK.push_back(6);
                tempS.push_back(K[i]+4); tempS.push_back(K[i] +6);
            }
            else if (K[i] == 1) {   tempK.push_back(6); tempK.push_back(8);
                tempS.push_back( K[i]+6); tempS.push_back(K[i] +8);
            }
            else if (K[i] == 2) {
                tempK.push_back(7); tempK.push_back(9);
                tempS.push_back( K[i]+7); tempS.push_back(K[i] +9);
            }
            else if (K[i] == 3) {
                tempK.push_back(4); tempK.push_back(8);
                tempS.push_back( K[i]+4); tempS.push_back(K[i] +8);
            }
            else if (K[i] == 4) {
                tempK.push_back(3); tempK.push_back(9); tempK.push_back(0);
                tempS.push_back( K[i]+3); tempS.push_back( K[i] +9); 
                tempS.push_back(K[i] +0);
            }
            else if (K[i] == 6) {
                tempK.push_back(1); tempK.push_back(7); tempK.push_back(0);
                tempS.push_back( K[i]+1); tempS.push_back( K[i] +7); 
                tempS.push_back(K[i] +0);
            }
            else if (K[i] == 7) {
                tempK.push_back(2); tempK.push_back(6);
                tempS.push_back( K[i]+2); tempS.push_back(K[i] +6);
            }
            else if (K[i] == 8) {
                tempK.push_back(1); tempK.push_back(3);
                tempS.push_back( K[i]+1); tempS.push_back(K[i] +3);
            }
            else if (K[i] == 9) {
                tempK.push_back(2); tempK.push_back(4);
                tempS.push_back( K[i]+2); tempS.push_back(K[i] +4);
            }
        }
        S = tempS; 
        tempS.clear();
        tempS.resize(100);
        K = tempK;
        tempK.clear();
        tempK.resize(100);
    }
}

1 个答案:

答案 0 :(得分:0)

这是问题所在:

for (int i=1; i<=K.size(); i++)

矢量索引从0开始,最高索引为K.size()-1。当i到达K.size()时,K[i]将在向量外访问。

应该是:

for (int i = 0; i < K.size(); i++)