Correcte manier om met vectoren van arrays te werken

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]' requestedwanneer u het probeert te resize. Wat gaat er mis?


Antwoord 1, autoriteit 100%

U kunt geen arrays opslaan in een vectorof 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 arraygebruiken, zoals die van Boost, TR1 en C++0x:

std::vector<std::array<double, 4> >

(U wilt std::arrayvervangen door std::tr1::arrayom de sjabloon te gebruiken die is opgenomen in C++ TR1 of boost::arrayom 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 intwaarde zoals 0?

Probeer:

static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);

Other episodes