Ошибка с std :: find () для вектора - PullRequest
0 голосов
/ 06 августа 2011

Я получаю RUN FAILED (exit value 1, total time: 493ms). Я получаю его, когда пытаюсь проверить, содержит ли вектор элемент из массива:

if (find(cycles.begin(), cycles.end(), permutation[i]) == cycles.end()) {
     startCycle = permutation[i];
     break;
}

Полный код программы:

#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

#define TESTING_FILE_IN
//#define TESTING_FILE_OUT
#define DEBUG
//#define SHOW_TIMING

vector< int > cycles;
int permutation[1001];

/*
 * 
 */
int main() {

    #ifdef TESTING_FILE_IN
    freopen("in.txt", "r", stdin);
    #endif

    int ind, startCycle, n, count, elemProc;

    scanf("%d", &n); //Number of elements in the permutation

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

    // Calculate cycles
    startCycle = 1;
    while (true) {
        cycles.push_back(ind + 1);
        elemProc++;
        ind = permutation[ind] - 1;
        if (ind == startCycle) {
            cycles.push_back(startCycle);
            cycles.push_back(-1);
            count++;
            for (int i = 0; i < n; i++) {
                if (find(cycles.begin(), cycles.end(), permutation[i]) == cycles.end()) {
                    startCycle = permutation[i];
                    break;
                }
            }
        }
        if (elemProc == n)
            break;
    }

    cout << count << endl;
    for (int i = 0; i < cycles.size(); ++i) {
        if (cycles[i] != -1)
            cout << cycles[i] << " ";
        else
            cout << endl;
    }

    return 0;
}

Когда я комментирую кусок кода, который выполняет поиск, он собирается и работает нормально. Надеюсь, ты сможешь мне помочь. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 августа 2011

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

       v----you should initialize these local variables
   int ind, startCycle, n, count, elemProc;

Вы можете определить их как

   int ind = 0, startCycle = 0, n = 0, count = 0, elemProc = 0;
1 голос
/ 06 августа 2011

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

ind = permutation[ind] - 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...