vector subscript out of range c чем это связано?

224
10 марта 2018, 19:40

Ребят помогите с чем связана такая ошибка? Почему выходит за рэндж. Заметил во многих программах моих появляется когда использую большие числа. В чем дело?

#include <iostream>
#include <vector>
using namespace std;
int main()
    {
    int n, q;
    cin >> n >> q;
    vector <int> arr(n * 2 - 1);
    vector <int> arr1(q);
    for (int i(0); i < q; i++)
        {
        cin >> arr1[i];
        }
    for (int i(0); i < q; i++)
        {
        arr1[i] = arr1[i] - 1;
        }
    int j = 1;
    for (int i = 0; i < arr.max_size(); i++)
        {
        if (i % 2 == 0)
            {
            arr[i] = j;
            j++;
            }
        }
    cout << endl << arr.capacity() << endl << endl;
    int z = 1;
    int i = arr.max_size() - 1;
    if (arr.max_size() > 3)
        {
        while (i > 0)
            {
            if (arr[i] > 0)
                {
                while (z < arr.max_size() - 2)
                    {
                    if (arr[i - z] == 0)
                        {
                        swap(arr[i], arr[i - z]);
                        z = 1;
                        break;
                        }
                    else
                        {
                        z++;
                        }
                    }
                }
            i--;
            }
        }
    else
        {
        while (i > 0)
            {
            if (arr[i] > 0)
                {
                while (z < arr.max_size())
                    {
                    if (arr[i - z] == 0)
                        {
                        swap(arr[i], arr[i - z]);
                        z = 1;
                        break;
                        }
                    else
                        {
                        z++;
                        }
                    }
                }
            i--;
            }
        }
    for (int jok(0); jok < arr1.max_size(); jok++)
        {
        cout << arr[arr1[jok]] << endl;
        }
    return 0;
    }
Answer 1

Так, на всякий случай - вы в курсе, что max_size() возвращает не размер вектора, а сколько элементов он может содержать в принципе?

Вот вы и выскакиваете, мягко говоря, очень далеко...

Answer 2

Потому что у вас ошибки в вычислении индекса элемента. Например в цикле for (int i = 0; i < arr.max_size(); i++). Вместо max_size должно быть просто size.

READ ALSO
Функция как параметр для другой функции

Функция как параметр для другой функции

Требуется вызвать функции с различными типами данных (void, double, int) в другой функцииПример: Есть функции:

232
В вектор записывается не вся информация

В вектор записывается не вся информация

Почему когда я выписываю названия городов, выписывается лишь последнее записанное значение?

214
Сортировка пользовательского класса в QVector

Сортировка пользовательского класса в QVector

Как сделать сортировку вектора моего класса QVector <DbTrade>?

214
Зависает чтение InputStream

Зависает чтение InputStream

Пытаюсь прочитать длинный InputStream (с ~180к+ символов) Этим способом зависает в while:

182