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?

48
demandé sur Pulkit Sinha 2011-01-06 09:11:21

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.)

98
répondu James McNellis 2011-01-06 06:18:55

Utilisation:

vector<vector<float>> vecArray; //both dimensions are open!
7
répondu Nawaz 2011-01-06 06:21:23

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é.

7
répondu Farewell Stack Exchange 2014-10-06 11:37:37

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);
5
répondu Mark Ransom 2011-01-06 06:17:03