Why do I keep getting "vector subscript out of range" error for 2D vector?

62 Views Asked by At

I am trying to create an adjacency list graph representation using a vector(V) of vectors(v). My goal is for every new vertex value entered, I increment the size of the V*, and insert the new value into the open spot, which would then be the starting value of v**.

I then want to create an edge between the new value entered, and another value that already exists in the adjacency matrix.

However, with my code I keep getting the "vector subscript out of range error" once I enter the secIndexVal. I've already tried making the initial value of numberIndices larger (up to 10) as well as the things I've mentioned in the code. Thank you.

*The Vector of vectors, I notated as 'V' **A vector within V, I notated as 'v'

int indexVal; 
int secIndexVal; 
int numberIndices = 0; 
bool valIsFound = false; 
vector <vector <int>> vecOfVectors(numberIndices);

int main()
{
    cout << "\nEnter first value: ";
    cin >> indexVal;

    cout << "\nEnter second value: ";
    cin >> secIndexVal;

    numberIndices++;
    vecOfVectors.resize(numberIndices);
    vecOfVectors[numberIndices - 1].push_back(indexVal);
    vecOfVectors[numberIndices - 1].push_back(secIndexVal);
    //pushes back the values of indexVal then secIndexVal to index 0 
    //I tried changing the value within the brackets to [numberIndices]

    numberIndices++;
    vecOfVectors.resize(numberIndices);
    vecOfVectors[numberIndices].push_back(secIndexVal); 
    vecOfVectors[numberIndices].push_back(indexVal);
    //pushes back the values of secIndexVal then indexVal to index 1
    //I tried changing the value within the brackets to [numberIndices + 1]         

    cout << "\nExit? (y/n)";
    cin >> userPrompt;

    while (userPrompt != 'y')
    {

        cout << "\nEnter a new value: ";
        cin >> indexVal; //new value

        numberIndices++;
        vecOfVectors.resize(numberIndices); 

        cout << "\n enter a value to connect it to: ";
        cin >> secIndexVal; //old value

        vecOfVectors[numberIndices - 1].push_back(indexVal); //new value given newly opened spot on vecOfVectors


        for (int j = 0; j < numberIndices; ++j)
        {
            if (vecOfVectors[j].at(0) == secIndexVal)
            {
                valIsFound = true; 
                vecOfVectors[j].push_back(indexVal); //the new value is attached to the adjacency list at the index of the old value
            }
        }

        if (valIsFound == true)
        {
            vecOfVectors[numberIndices - 1].push_back(secIndexVal); //the old value is attached to the adjacency list at the index of the new value
        }

        cout << "\nExit? (y/n)";
        cin >> userPrompt;
    }
}
0

There are 0 best solutions below