82 votes

affectation de valeurs multiples à un tableau en c++

Ainsi, lorsque vous initialisez un tableau, vous pouvez lui attribuer plusieurs valeurs en une seule fois :

int array [] = {1,3,34,5,6}

mais que faire si le tableau est déjà initialisé et que je veux remplacer complètement les valeurs des éléments de ce tableau en une ligne

donc

int array [] = {1,3,34,5,6}
array [] = {34,2,4,5,6}

ne semble pas fonctionner...

Y a-t-il un moyen de le faire ?

74voto

Nawaz Points 148870

Il y a une différence entre initialisation y affectation . Ce que vous voulez faire n'est pas une initialisation, mais une affectation. Mais une telle affectation à un tableau n'est pas possible en C++.

Voici ce que vous pouvez faire :

#include <algorithm>

int array [] = {1,3,34,5,6};
int newarr [] = {34,2,4,5,6};
std::copy(newarr, newarr + 5, array);

Cependant, en C++0x, vous pouvez le faire :

std::vector<int> array = {1,3,34,5,6};
array = {34,2,4,5,6};

Bien sûr, si vous choisissez d'utiliser std::vector au lieu d'un tableau brut.

7 votes

std::copy(std::begin(newarr), std::end(newarr), std::begin(array)); serait mieux, n'est-ce pas ?

1 votes

@MattCruikshank : Oui. Mais cela n'était pas possible en C++03.

5 votes

Mieux vaut utiliser std::array au lieu de std::vector quand il est de taille fixe.

10voto

Vous devez remplacer les valeurs une par une, par exemple dans une boucle for ou en copiant un tableau sur un autre, par exemple en utilisant la méthode suivante memcpy(..) ou std::copy

par exemple

for (int i = 0; i < arrayLength; i++) {
    array[i] = newValue[i];
}

Veillez à assurer un contrôle correct des limites et toute autre vérification nécessaire pour éviter un problème de dépassement de limites.

3voto

Jingbo Hu Points 11

J'ai créé une petite fonction modèle pour assigner commodément des valeurs à un pointeur brut.

template <typename T, typename U>
void set_array(T* array, U x) {
  *array = x;
}

template <typename T, typename U, typename... V>
void set_array(T* array, U x, V... y) {
  *array = x;
  set_array(array + 1, y...);
}

Un exemple :

int main() {
  int64_t array[10] = {};
  set_array(array, 11, 12, 13, 14, 15, 16);
  for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i) {
    std::cout << array[i] << ", ";
  }
}

...et ça devrait s'imprimer :

11, 12, 13, 14, 15, 16, 0, 0, 0, 0,

2voto

sehe Points 123151
const static int newvals[] = {34,2,4,5,6};

std::copy(newvals, newvals+sizeof(newvals)/sizeof(newvals[0]), array);

0voto

Mike S Irvine Points 1

Et si le tableau est un tableau 2d comme array[5][5]; ?

Je me souviens qu'il suffit de mettre 10 valeurs dans l'instruction d'affectation pour qu'elle soit lue comme suit 2 ensembles de 5 entrées

array[5][5] = {1,2,3,4,5,1,2,3,4,5}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X