12
votes

C ++ Tableau Typast

Comment peut-on enregistrer un tableau d'Int à un tableau de flotteur? Merci.


0 commentaires

6 Réponses :


1
votes

Vous ne pouvez pas.

Vous devrez créer un autre tableau et copier manuellement des éléments avec une boucle.

en C ++, le compilateur ne met généralement pas dans des boucles en binaire résultant sans que vous voyez explicitement cela dans votre code.


0 commentaires

11
votes

Si vous avez un tableau de int S, ce que vous avez essentiellement est un bloc de n int S stocké contigueusement dans la mémoire. Un éventail de flotteurs, cependant, ne serait pas des flotteurs stockés de manière contiguë dans la mémoire, c'est-à-dire une séquence de bits entièrement différente en mémoire. De plus, des valeurs de points flottants sont représentées en binaire de manière totalement différente de celle des valeurs intégrales. En fait, vous ne pouvez même pas être sûr d'être sûr qu'un int est la même taille qu'un float.

donc donc, vous devez soit jeter chaque int à un float séparément lorsque vous traitez la matrice ou créez un tableau totalement différent en copiant le tableau d'origine.

Par exemple, vous pouvez simplement convertir chaque Int à un flotteur paresseusement lorsque vous traitez le tableau: xxx


1 commentaires

Ou vous pouvez utiliser STD :: Copier et laisser passer implicitement pour vous quand il fait une mission.



4
votes

Si vous utilisez des vecteurs au lieu de tableaux, vous pouvez ensuite utiliser l'itérateur dans le constructeur du vecteur pour effectuer la copie. xxx pré>

Si vous avez une matrice en tant que tableau, mais que vous pouvez avoir comme sortie un vecteur, vous pouvez également faire cela: p> xxx pré>

si Vous avez besoin d'entrée et de sortie d'un tableau, vous pouvez utiliser std :: copier code>, mais assurez-vous simplement que votre matrice de sortie est suffisamment grande: P>

int ai[] = {1,2,3};
float af[] = {0, 0, 0};
std::copy(ai, ai+3, af);


0 commentaires

3
votes

imo, utilisez transformer et convertir int Vector sur Vecteur de flotteur.

float convert (int i) { return static_cast<float>(i); }

int main () {
  int first[10];
  float second[10];
    // set some values:
  for (int i=0; i<10; i++) 
      first[i] =  (i*10); 

  transform (first, first + 10, second, convert);

  return 0;
}


2 commentaires

La coulée implicite que std :: copie sera suffisante; std :: transformer fonctionne mais est inutile.


Le static_cast est également inutile.



24
votes
#include <algorithm>
#include <iostream>

#define N 50

int main() {
    int intArray[N] = { ... };
    float floatArray[N];
    std::copy(intArray, intArray + N, floatArray);
    std::cout
        << std::boolalpha << std::equal(intArray, intArray + N, floatArray)
        << std::endl;
    return 0;
}

2 commentaires

Pourquoi définir n au lieu de juste int n = 50; ?


C'est plus stylistique plus stylistique. #define est une commande de préprocesseur qui définit une valeur au moment de la compilation, dont toutes les occurrences sont remplacées par des littéraux de la valeur. Cela évite également de créer une variable, ce qui peut avoir de nombreux avantages dans des programmes plus complexes. Une autre explication est ici: Stackoverflow. com / questions / 6004963 / ...



1
votes

avec C ++ 17 et std :: Array Code> (ou une classe similaire) Ce problème peut être résolu de manière générique.

std::array<int, 5> array_of_ints;
auto array_of_floats = elements_cast<float>(array_of_ints);


0 commentaires