向量 C++ 中的字节数

Bytes in vector C++

本文关键字:字节数 C++ 向量      更新时间:2023-10-16

我有以下结构,将添加元素的每个字节存储在向量的后续位置:

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))应该是00000000000000000000000000000000的,这相当于int的二进制表示为0,但是当我尝试在for循环中打印向量的元素时, 它直接显示数字。是因为我用sizeof(int)初始化了它,它一次打印 4 个字节吗?

是的,它一次打印四个字节,因为你要求它打印整数。如果要单独查看每个字节,可以遍历整个向量并单独打印每个元素。然后,最好在打印之前将字符转换为 int,以便获得数字而不是某些控制字符。

for (int n : sv.storage) 
std::cout << n << std::endl;

现场演示