Использование информации из ссылочного указателя для заполнения вектора - PullRequest
1 голос
/ 20 января 2020

Моя цель - создать функцию, которая берет список целых чисел и сравнивает их друг с другом. В основном, если числа в позициях до и после текущей позиции совпадают, текущее число становится (или остается) 0. В противном случае оно становится (или остается) 1.

Код должен предполагать, что есть ноль перед первым и после последнего значения, поэтому есть те «if-else» операторы за пределами для l oop. Обновление должно происходить одновременно, поэтому существует второй вектор для хранения новых значений (x), который будет установлен главным вектором (houses) в конце.

Я планировал взять значения, переданные функции, и заполнить ими вектор. Тем не менее, я никогда не видел, чтобы это было сделано раньше (даже если я менее чем за 3 месяца до получения степени бакалавра ... спасибо, Страйер).

Как заполнить вектор списком, хранящимся в указанной ячейке памяти?

Примечание:

  • Я использовал cout << *states; как способ попробовать и увидеть, что код видит, когда я ссылаюсь на местоположение, когда я понял, что это не работает , но все, что он возвращает, это одно целое число. Может ли кто-нибудь помочь мне понять, как это работает, и как заполнить вектор значениями?

  • Кроме того, я знаю, что было бы более эффективно использовать push_back() вместо .at(i)= метода, но я просто пробовал все, что мог, чтобы выяснить проблему и намотать там, когда я сдался.)

vector<int> cellCompete(int* states, int days) 
{
    vector<int> houses;
    vector<int> x;
    x.resize(8);
    cout << *states;
    for (unsigned int i = 0; i<8; i++){
        houses.push_back(*states);
        cout << houses.at(i) << endl;
    }
    for (unsigned int i = 0; i<days; ++i) {        
        if (houses.at(1)==0) {
            x.at(0)=0;
        }
        else{
            x.at(0)=1;
        }
        for (unsigned int y=1; y<7; y++){
            if (houses.at(y-1)==houses.at(y+1)){
                x.at(y)=0;
            }
            else{
                x.at(y)=1;
            }
        }
        if (houses.at(6)==0){
            x.at(7)=0;
        }
        else{
            x.at(7)=1;
        }
        houses=x;        
    }
    return houses;
}

1 Ответ

0 голосов
/ 20 января 2020

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

Читая ваш код, я понимаю, что список " целых чисел""на самом деле является массивом , который передается как указатель, а дни - это число целых чисел в массиве:

vector<int> cellCompete(int* states, int days)  

К сожалению, в вашем l oop вы всегда добавляете к вектору *state, который в вашем случае будет первым массивом целого числа. Если указатель указывает на массив, вы можете либо увеличить его, чтобы он указывал на следующий элемент, либо просто проиндексировать его, как если бы это было сделано для массива:

vector<int> houses;
vector<int> x(8);   // you can get the right size at construction
for (unsigned int i = 0; i<8; i++){
    houses.push_back(states[i]);
    cout << houses[i] << endl;
}

Вопрос, на который я не могу ответить: Есть ли причина для использования жестко закодированного размера 8? не должно ли это быть days вместо этого?

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

...