Ich mache eine Höhenkarte in OpenGL. Die einzige z jedes Vertex in einer Datei gespeichert wird, und ich habe auch den x- und y-Wert in einem Vektor speichern:Wie schiebe ich ein Array in einem Std-Vektor
#include <vector>
#include <fstream>
#include <sstream>
int main(void)
{
std::vector<float> _data;
float constexpr triangle_side(1.118033989);
std::ifstream ifs("mymap");
std::string line;
if (not ifs.is_open())
return -1;
for (float y(0) ; std::getline(ifs, line) ; --y)
{
std::istringstream iss(line);
for (float x(static_cast<int>(y) % 2 ? 0 : triangle_side/2), z ; iss >> z ; x += triangle_side)
_data.push_back({x, y, z}); // does not compile
}
ifs.close();
return 0;
}
Meiner Meinung nach ist es eine schlechte Sache zu tun: _data.push_back(x); _data.push_back(y); _data.push_back(z);
, weil die Der Vektor wird vielleicht das Array bei jedem Aufruf neu zuweisen.
Was ist der beste Weg, es zu tun?
Wenn ich tun:
std::vector< std::array<float, 3> > _data;
//...
_data.push_back({x, y, z});
ist es, die Werte garantiert werden alle zusammenhängend sein?
Wenn Sie die endgültige Größe des Vektors kennen, können Sie 'reserve' http://www.cplusplus.com/reference/vector/vector/reserve/ –
@AlessandroPezzato ich tun nicht wissen, weil die Größe der Karte nicht festgelegt ist. Es hängt von der verwendeten Datei ab. – Boiethios
@Boiethios, ok, so können Sie std :: array oder Joachim antwort (Reserve n + 3 Steckplätze in jeder Schleife) –