C ++ для l oop итераций с изменением целочисленных векторных значений - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь решить проблему, в которой мне нужно сохранить значения в векторе и отобразить минимальные и максимальные значения. Но минимальные и максимальные значения, которые я получаю при использовании * min_element и * max_element, на на больше фактических значений.

Но когда я использую a для l oop до этого вот так:

for(int possibility: posibilities);

Я получаю актуальные значения! Почему это происходит? Я ничего не делаю внутри for l oop, и все же это единственное, что влияет на окончательный результат.

Использование ввода как:

3
2
3 6
3
1 3 5
5
1 2 5 6 7

Вот результат с и без для l oop: Outputs

Вот мой весь код:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){

    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        int positions[n]; //Already sorted
        for(int i = 0; i < n; i++){
            cin >> positions[i];
        }

        int currentInfected = 1;
        vector<int> possibilities;

        for(int i = 0; i < n; i++){
            for(int j = i; ((j <= n - i + 1) && (positions[j + 1] - positions[j] <= 2) ); j++){
                //Check Forward
                currentInfected++;
            }
            for(int j = i; ((j > 0) && (positions[j] - positions[j - 1] <= 2) ); j--){
                //Check Backward
                currentInfected++;
            }
            possibilities.push_back(currentInfected);
            currentInfected = 1; //Reset to one
        }

        //SOMEHOW THIS KEEPS THE VALUE IN THE VECTOR STEADY
        for(int possibility: possibilities);

        cout << *min_element(possibilities.begin(), possibilities.end()) << " " << *max_element(possibilities.begin(), possibilities.end()) << endl;


    }

    return 0;
}

Компилятор: Я использую расширение VS Code под названием CompileRun . Глядя на его документы, я думаю, что он использует mingw для windows и g cc для Linux. CompileRun Github

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Спасибо всем, кто мне помогал. Я не могу сказать, что пришел к объяснению, но я понял проблему.

Проблема с индексом, предложенная @Blastfurnace, действительно решила мою основную проблему.

Но я пока не могу понять, почему итерация l oop сыграла роль в изменении вывода. Я сузил ошибку до l oop. Это было единственное, что при добавлении / удалении изменяло вывод. Спасибо всем, кто в этом участвует. Это был мой первый вопрос, и я был потрясен ответом :)

0 голосов
/ 08 мая 2020

Вместо // КАК ЭТО ПОДДЕРЖИВАЕТ ЗНАЧЕНИЕ В ВЕКТОРЕ СТАБИЛЬНЫМ for (int possible: possible);

для отладки посмотрите, что именно у вас есть в векторных возможностях

for (int i = 0; я <возможности.размер (); я ++) cout << возможности [я]; </p>

Это определенно напечатает минимальное и максимальное значение векторных возможностей: cout << * min_element (sizes.begin (), sizes.end ()) << "" << * max_element (Возможности.begin () , возможности.end ()) << endl; </p>

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