Quelqu'un pourrait-il dire quelle est la bonne façon de travailler avec un vecteur de tableaux?
J'ai déclaré un vecteur de tableaux (vector<float[4]>
) mais a obtenu error: conversion from 'int' to non-scalar type 'float [4]' requested
en essayant de resize
le. Qu'est-ce qui ne va pas?
Vous ne pouvez pas stocker de tableaux dans un vector
ni dans aucun autre conteneur. Le type des éléments à stocker dans un conteneur (appelé le type de valeur du conteneur ) doit être à la fois conforme à la copie et assignable. Les tableaux ne sont ni l'un ni l'autre.
Vous pouvez cependant utiliser un modèle de classe array
, comme celui fourni par Boost, TR1 et C++ 0x:
std::vector<std::array<double, 4> >
(Vous voudrez remplacer std::array
avec std::tr1::array
pour utiliser le modèle inclus dans C++ TR1 ou boost::array
à utiliser le modèle des bibliothèques Boost . Alternativement, vous pouvez écrire le vôtre; c'est assez simple.)
Utilisation:
vector<vector<float>> vecArray; //both dimensions are open!
Il n'y a pas d'erreur dans le code suivant:
float arr[4];
arr[0] = 6.28;
arr[1] = 2.50;
arr[2] = 9.73;
arr[3] = 4.364;
std::vector<float*> vec = std::vector<float*>();
vec.Push_back(arr);
float* ptr = vec.front();
for (int i = 0; i < 3; i++)
printf("%g\n", ptr[i]);
OUTPUT IS:
6,28
2,5
9,73
4.364
EN CONCLUSION:
std::vector<double*>
est une autre possibilité en dehors de
std::vector<std::array<double, 4>>
que James McNellis a suggéré.
Chaque élément de votre vecteur est un float[4]
, donc lorsque vous redimensionnez, chaque élément doit être initialisé par défaut à partir d’un float[4]
. Je suppose que vous avez essayé d’initialiser avec une valeur de int
comme 0
?
Essayer:
static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);