Kan iemand vertellen wat de juiste manier is om met een vector van arrays te werken?
Ik heb een vector van arrays gedeclareerd (vector<float[4]>
) maar kreeg error: conversion from 'int' to non-scalar type 'float [4]' requested
wanneer u het probeert te resize
. Wat gaat er mis?
Antwoord 1, autoriteit 100%
U kunt geen arrays opslaan in een vector
of een andere container. Het type elementen dat in een container moet worden opgeslagen (het waardetypevan de container genoemd) moet zowel kopieerbaar als toewijsbaar zijn. Arrays zijn geen van beide.
U kunt echter een klassesjabloon array
gebruiken, zoals die van Boost, TR1 en C++0x:
std::vector<std::array<double, 4> >
(U wilt std::array
vervangen door std::tr1::array
om de sjabloon te gebruiken die is opgenomen in C++ TR1 of boost::array
om de sjabloon uit de Boost-bibliotheken te gebruiken. U kunt ook uw eigen schrijven; het is vrij eenvoudig.)
Antwoord 2, autoriteit 8%
Gebruik:
vector<vector<float>> vecArray; //both dimensions are open!
Antwoord 3, autoriteit 6%
Er is geen fout in het volgende stukje code:
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
Concluderend:
std::vector<double*>
is een andere mogelijkheid afgezien van
std::vector<std::array<double, 4>>
Dat James McNellis voorstelde.
Antwoord 4, Autoriteit 3%
Elk element van uw vector is een float[4]
, dus wanneer u het formaat van elk element verkleint, moet u standaardinaliseren vanaf een float[4]
. Ik neem aan dat je geprobeerd hebt om te initialiseren met een int
waarde zoals 0
?
Probeer:
static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);