我有以下结构,将添加元素的每个字节存储在向量的后续位置:
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);
};
及其实施:
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;
}
我想使用它在其中存储整数,如下所示:
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;
}
}
这里有一些我不明白的事情。因为它将元素的字节存储在vector
中的不同位置,所以vector
中的前四个位置(sv.fetch(0)
、sv.fetch(1)
、sv.fetch(2)
、sv.fetch(3)
)应该是00000000
00000000
00000000
00000000
的,这相当于int
的二进制表示为0
,但是当我尝试在for
循环中打印向量的元素时, 它直接显示数字。是因为我用sizeof(int)
初始化了它,它一次打印 4 个字节吗?
是的,它一次打印四个字节,因为你要求它打印整数。如果要单独查看每个字节,可以遍历整个向量并单独打印每个元素。然后,最好在打印之前将字符转换为 int,以便获得数字而不是某些控制字符。
for (int n : sv.storage)
std::cout << n << std::endl;
现场演示