Bonne façon de travailler avec le vecteur de tableaux
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 error: conversion from 'int' to non-scalar type 'float [4]' requested
lors de la tentative de resize
il. Ce qui ne va pas?
4 réponses
Vous ne pouvez pas stocker les tableaux dans un vector
ou tout autre conteneur. Le type des éléments à stocker dans un conteneur (appelé type de valeur du conteneur) doit être à la fois constructible et assignable. Les tableaux sont ni.
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 aurez envie de remplacer std::array
avec std::tr1::array
pour utiliser le modèle inclus dans C++ TR1, ou boost::array
utiliser le modèle de l'augmentation les bibliothèques. 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 morceau de 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]);
LA SORTIE EST:
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 du vecteur est un float[4]
, de sorte que lorsque vous redimensionnez chaque élément doit initialisé par défaut à partir d'un float[4]
. Je suppose que vous avez essayé d'initialiser avec une valeur int
comme 0
?
Essayez:
static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);