При работе перепоняется vector: “vector subscript out of range”

89
30 мая 2021, 23:30

Около месяца изучаю C++, несколько дней пытаюсь отладить код. Ошибка, наверное, очевидная для бывалых, всё никак не находится. После ввода 1-го значения при работе программы происходит остановка и сообщение "vector subscript out of range". Подскажите, пожалуйста, где искать ошибку...

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    // Инициализация кол-ва отрезков и вектора координат.
    int n;
    cin >> n;

    vector <double> v;
    // Формирование вектора "v" из всех координат в порядке ввода.
    for (int i = 0; i < 2 * n; i++) {
        cin >> v[i];
    }
    // Формирование возрастающего вектора "w" из всех неравных координат.
    bool goo = true;
    vector <double> w;
    for (int j = 0; goo; j++) {
        double per = v[0]; // переменной присваивается 1-е значение вектора v
        goo = false; // условие завершения цикла при отсутствии нового элемента

        for (int i = 0; i < n; i++) {
            double vi = v[i]; // для условия
            // инициализация 1-го элемента
            if (j == 0) {

                if (per > vi) {     
                    per = vi;
                }
                w[j] = per;
                goo = true;
            }
            // инициализация 1+ элементов
            else {
                int gop = j - 1; // для задания элемента вектора
                if (w[gop] < v[i]) {
                    if (per > v[i] || per < w[gop]) {
                        per = v[i];
                    }
                    w[j] = per;
                    goo = true;
                }
            }
        }
    }
Answer 1

Вы создаете вектор нулевой длины

vector <double> v;

После чего пытаетесь писать в него - куда?

// Формирование вектора "v" из всех координат в порядке ввода.
for (int i = 0; i < 2 * n; i++) {
    cin >> v[i];
}

Или указывайте в конструкторе количество элементов заранее

vector <double> v(2*n);

или пользуйтесь вектором как обычно:

for (int i = 0; i < 2 * n; i++) {
    double d;
    cin >> d;
    v.push_back(d);
}

Естественно, что то же относится и к работе с вектором w, например...

READ ALSO
Вывод значения переменной из функции

Вывод значения переменной из функции

Хочу, чтобы выводилось значение переменной aЕсли введенное число больше 5 - вывести 5, иначе 4

80
GDB процесс дебага

GDB процесс дебага

В Microsoft Visual Studio есть встроенный дебаггер, который позволяет дизассемблировать выполняемый файл и ходить по строчкам ассемблера пошагово

96
Анимация ухода сайтбара

Анимация ухода сайтбара

Есть сайтбар , его выдвижение и задвижение нужно анимировать , но с помощью свойства animation получается только первое (анимация выдвижения)...

106
Реализация переключения по клику

Реализация переключения по клику

Всем привет, не могу полностью реализовать переключение по кликуНужно просто в одном диве убирать класс в другой добавлять и т

106