Как инициализировать весь массив с -1 без цикла - PullRequest
1 голос
/ 02 апреля 2020

Эй, я пытаюсь инициализировать все элементы массива с -1. Но подвох - без использования l oop.

Так что я искал net и кто-то сказал использовать

int *arr = new int[n]{-1};

Но это только присвоение первого элемента -1.

Итак, мой вопрос, как я могу назначить, помочь мне.

Ответы [ 4 ]

3 голосов
/ 02 апреля 2020

Как инициализировать весь массив с -1 без l oop

Примерно так:

int array[] = {
    -1,
    -1,
    -1,
    -1,
    -1,
    -1,
    -1,
    -1,
};

Если размер неизвестен во время компиляции, тогда следует использовать al oop - достигается ли l oop с помощью управляющей структуры, goto (не используйте его для этого), рекурсии или вызова функции, выполняющей l oop. Вы можете избежать написания l oop самостоятельно, используя std::fill_n или одну из связанных с ней функций, как показано в в этом ответе .

2 голосов
/ 02 апреля 2020

Конечно, это невозможно, если вы не хотите писать -1 несколько раз, но мы можем назначить без l oop (На самом деле, мы не можем использовать al oop для инициализации массива даже с l oop .)

Предупреждение: фрагмент просто для удовольствия, не принимайте это всерьез. Не для практического использования

Рекурсия может заменить любую l oop. Это код, который на самом деле не имеет никакого l oop.

void fun(int* p, std::size_t n, std::size_t cur = 1u)
{
    *p = -1;
    if(n != cur) fun(p+1, n, cur+1)
}
2 голосов
/ 02 апреля 2020

Вы можете использовать std::fill, например:

#include <iostream>
#include <algorithm>

int main() {
    int *arr = new int[10];
    std::fill(arr, arr + 10, -1);

    for (size_t i = 0; i < 10; i++) {
        std::cout << arr[i] << " ";
    }

    return 0;
}

или даже лучше std::fill_n:

#include <iostream>
#include <algorithm>

int main() {
    int *arr = new int[10];
    std::fill_n(arr, 10, -1);

    for (size_t i = 0; i < 10; i++) {
        std::cout << arr[i] << " ";
    }

    return 0;
}
1 голос
/ 02 апреля 2020

Если вы заранее знаете размер массива, вы можете заполнить его при объявлении:

#include <iostream>
int main(){
    int a[10] ={-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};

    for (int i=0;i<10;i++)
        std::cout<< a[i] << std::endl;

    return 0;
}

В случае, если вам нужно динамически распределить память, используя std::fill (из ответа @NutCracker ) кажется хорошим выбором.

...