Arraygröße nachträglich verändern
-
@ Ad aCTa
Joup, muss, geht ums auslesen einer Farb-Zeilenkamera.
@Sebastian
- Welche vorteile hätte ein Vektor? Weil funktionieren tuts schon wies in meinem edit ist. [Edit] Ok, selbstnachschlagen macht schlau!
- Ok, dann werde ich sie in die hölle schicken
- Aber ist doch immernoch C++, oder?[Edit] Die sache mit dem Vektor ist die, die API der kamera liefert ein char-array. [Edit]
-
blacksheep1 schrieb:
Welche vorteile hätte ein Vektor?
Mit Vektoren kann man dynamisch hantieren. Außerdem musst du keinen Extra-Speicher allokiieren, du rufst einfach std::vector::push_back( ); auf und kannst ein neues Element hinzufügen.
blacksheep1 schrieb:
Aber ist doch immernoch C++, oder?
Da wir im C++-Forum sind: printf( ) und sein Datenerkennungsoperator "%" kommen aus der C-Standardbibliothek und haben in C++ nichts zu suchen. Benutze sattdessen std::cout.
-
check!
-
blacksheep1 schrieb:
Wie würde ich "%" C++-konform ersetzen?

Wegen dem Smiley: War das jetzt ironisch gemeint? Zur Frage: Der zu dem Ausgabestream gehörige "<<"-Operator erwartet eine Zeichenkette oder eine Variable.
-
ne, ham grad aneinander vorbeigeredet ^^
-
blacksheep1 schrieb:
ne, ham grad aneinander vorbeigeredet ^^
Nein, warum?
-
ich sehe mehrere möglichkeiten:
- mach den zeiger zur membervariable
- schreib ne methode, die einen charzeiger liefert
- last, not least, schreib deine funktion um:
myclass::myclass(unsigned char** iarray, int n)
{
*iarray = new unsigned char[n];
}
-
doch, ich dachte du meintest mit dem "%" das modulo, und nicht den "Datenerkennungsoperator" vom Printf.
-
blacksheep1 schrieb:
doch, ich dachte du meintest mit dem "%" das modulo, und nicht den "Datenerkennungsoperator" vom Printf.
Nein, dass hätte vom Kontext her doch überhaupt nicht gepasst.
-
Das rohe char-Array funktioniert normalerweise auch mit std::vector in dem du einen Speicherbereich bei der Instanziierung des Vektors angibst.
Siehe dazu:
http://cplusplus.com/reference/stl/vector/vector/ , speziell die Versiontemplate <class InputIterator> vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );
-
Ad aCTa schrieb:
Alternativ: du baust schnell eine eigene, kleine verkettete Liste, die zwar weniger Methoden als die STL hat, aber dafür schlanker ist.
Verkettete Listen sind nicht besonders speichersparend, da recht viele Zeiger nur für die Funktionalität des Containers benötigt werden. Gerade wenn es um
chargeht; da wird pro Element 1 Byte für die Daten und 8 Bytes für die zwei Zeiger verwendet. Eine effektive Nutzung von ungefähr einem Neuntel des angeforderten Speichers (evtl. sogar noch weniger durch Alignment) scheint mir nicht besonders platzsparend.Dafür sollte
std::vectorgeeigneter sein. Eine eigene Klasse dafür zu basteln ist nicht unbedingt nötig, einstd::vectorhat normalerweise ein paar wenige Bytes Overhead, die eigentlich nicht notwendig wären.blacksheep1 schrieb:
[Edit] Die sache mit dem Vektor ist die, die API der kamera liefert ein char-array. [Edit]
Das kannst du ja in einen Vector einfügen. Wie wurde der Speicher angefordert?
Eventuell kannst du doch eine eigene kleine Containerklasse schreiben, damit du den Inhalt (die
chars) nicht kopieren musst, sondern direkt in den Container verschieben kannst.