Ich habe folgende Struktur, die jedes Byte des hinzugefügten Elements in nachfolgenden Positionen des Vektors speichert:Bytes in Vektor C++
struct StashVector {
int size; // Size of each space
int next; // Next empty space
// Dynamically allocated array of bytes:
std :: vector<char> storage;
// Functions!
void initialize(int sz);
//void cleanup();
int add(const void* element);
void* fetch(int index);
int count();
// void inflate(int increase);
};
und seine Umsetzung:
void StashVector::initialize(int sz) {
size = sz;
next = 0;
}
int StashVector::add(const void* element) {
unsigned char* e = (unsigned char*)element;
for (int i = 0; i < size; i++)
storage.push_back(e[i]);
next++;
return(next-1); // Index number
}
void* StashVector::fetch(int index) {
assert(0 <= index);
if (index >= next)
return 0; // To indicate the end
// Produce pointer to desired element:
return &(storage.at(index*size));
}
int StashVector::count() {
return storage.size()/size;
}
Ich will, es benutzen für ganze Zahlen in ihm wie so zu speichern:
int main() {
StashVector sv;
sv.initialize(sizeof(int));
for (int i = 0; i < 5; i++) {
sv.add(&i);
}
for (int j = 0; j<sv.count(); j++) {
cout << *(int*)sv.fetch(j) << endl;
}
}
Hier kommt etwas, das ich nicht verstehe. Weil es das Bytes des Elements an verschiedenen Positionen in den vector
speichert, die ersten vier Positionen in dem vector
(sv.fetch(0)
, sv.fetch(1)
, sv.fetch(2)
, sv.fetch(3)
) sollten 00000000
00000000
00000000
00000000
, sein, die auf die Binärdarstellung von int
als 0
äquivalent ist, aber wenn ich versuche, die Elemente des Vektors in der for
-Schleife zu drucken, zeigt es die Zahlen direkt an. Ist es, weil ich es mit der sizeof(int)
initiierte, druckt es 4 Bytes auf einmal?