2 Stimmen

Größe des als Speicher übergebenen Vektors erweitern

Ich übergebe meinen Vektor an eine Funktion, die ein C-Array erwartet. Sie gibt die Menge der Daten zurück, die sie gefüllt hat (ähnlich wie fread). Gibt es eine Möglichkeit, wie ich meinem Vektor sagen kann, seine Größe zu ändern, um die Menge, die Funktion in übergeben hat, enthalten?

Natürlich stelle ich sicher, dass der Vektor die Kapazität() hat, um diese Menge an Daten zu speichern.

8voto

Andrew Grant Punkte 57342

Nein, es gibt keine unterstützte Möglichkeit, einen Vektor zu "erweitern", so dass er zusätzliche Werte enthält, die direkt hineinkopiert wurden. Verlassen Sie sich nicht auf "Kapazität", um Speicher ohne Größe zuzuweisen, in den Sie schreiben können.

Sie sollten sicherstellen, dass Ihr Vektor den erforderlichen Platz hat, indem Sie vor dem Aufruf der Funktion die Größe ändern und danach auf den richtigen Wert anpassen. z.B.

vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);

2voto

peterchen Punkte 39679

capacity sagt Ihnen nur, wie viel Speicherplatz reserviert ist, nicht aber die Größe des Vektors.

Sie sollten zunächst die Größe auf die maximal erforderliche Größe ändern:

vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);

1voto

shoosh Punkte 73374

Hmm..
vector.resize(size);
?

1voto

Benoît Punkte 16390

Std::vector hat eine resize()-Methode mit der neuen Größe als Parameter. Ein einfacher Aufruf mit der von Ihrer Funktion zurückgegebenen Zahl sollte also ausreichen.

0voto

jalf Punkte 235501

std::back_inserter könnte das sein, was Sie brauchen. Angenommen, Ihre Eingabefunktion kann mit einem Iterator arbeiten, übergeben Sie ihr std::back_inserter(myvector) . Das wird push_back alles, was in den Iterator geschrieben wird, und passen die Größe des Vektors bei Bedarf implizit an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X