Hé, j'essaie d'initialiser tous les éléments du tableau avec -1. Mais le hic est sans utiliser de boucle.

J'ai donc cherché sur le net et quelqu'un m'a dit d'utiliser,

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

Mais cela n'affecte que le premier élément à -1.

Donc, ma question est de savoir comment puis-je attribuer, m'aider.

1
Chandan Nick 2 avril 2020 à 17:02

4 réponses

Meilleure réponse

Vous pouvez utiliser std::fill comme:

#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;
}

Ou encore mieux 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;
}
2
NutCracker 2 avril 2020 à 14:16

Si vous connaissez à l'avance la taille du tableau, vous pouvez le remplir lorsque vous le déclarez:

#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;
}

Dans le cas où vous devez allouer dynamiquement de la mémoire, l'utilisation de std::fill (de la réponse @NutCracker) semble un bon choix.

1
Eddymage 2 avril 2020 à 14:14

Comment initialiser un tableau entier avec -1 sans boucle

Comme ça:

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

Si la taille n'est pas connue au moment de la compilation, alors une boucle doit être utilisée - que la boucle soit réalisée avec une structure de contrôle, goto (ne l'utilisez pas pour cela), récursivité ou appel à une fonction qui fait la boucle. Vous pouvez éviter d'écrire la boucle vous-même en utilisant std::fill_n ou l'une de ses fonctions connexes, comme indiqué dans cette réponse.

3
eerorika 2 avril 2020 à 14:21

Bien sûr, c'est impossible si vous ne voulez pas écrire -1 plusieurs fois, mais nous pouvons assigner sans boucle (En fait, nous ne pouvons pas utiliser une boucle pour initialiser un tableau même avec boucle.)

Attention: un extrait juste pour le plaisir, ne prenez pas cela au sérieux. Pas pour une utilisation pratique

La récursivité peut remplacer n'importe quelle boucle. C'est un code qui n'a vraiment aucune boucle.

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
John Ding 2 avril 2020 à 14:19