Функция is_sorted () не работает правильно в моем коде - PullRequest
0 голосов
/ 13 марта 2020

У меня есть этот код, в котором вводится число, а затем массив этого числа значений, например:

6
2
4
7
7
9
3

Все они находятся в индексе массива, например :

2-----0
4-----1
7-----2
7-----3
9-----4
3-----5

В этом коде я хочу выяснить, отсортированы ли все элементы от индекса 3 до конца массива, ie, если 7 9 3 отсортировано, используя is_sorted() функция, как это:

is_sorted(v+2+1, v+n-2-1)

Итак, это будет похоже на is_sorted(0+2+1, 0+6-2-1) или is_sorted(3, 3). В основном, проверяется, отсортирован ли массив 7 9 3, что, очевидно, неверно, но мой код сообщает 1 вместо 0.

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;

    cin >> n;
    int v[n];
    for(int i = 0; i < n; i++){
        int a;
        cin >> a;
        v[i] = a;
    }

    cout << is_sorted(v+2+1, v+n-2-1);

    return 0;
}

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Это:

int n;
int v[n];

- неопределенное поведение (при условии, что VLA являются частью C ++, а они - нет).

Пожалуйста, скомпилируйте код с предупреждениями.

0 голосов
/ 14 марта 2020

is_sorted принимает начальный и конечный итератор, поэтому, когда вы вызываете is_sorted(v+3, v+3), вы проверяете с 3-го элемента на 3-й (исключительный) элемент - всего ноль элементов. Если вы хотите проверить конец массива, второй аргумент должен быть концом массива - v+n

Кроме того, вы должны никогда включать все, что находится непосредственно в каталоге битов - это является частью внутренней реализации стандартной библиотеки и, вероятно, изменится и сломается в любой другой версии компилятора или библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...