2017-02-26 44 views
2

我有以下的結構存儲在矢量的後續位置添加元素的每個字節:字節矢量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); 
}; 

及其實施:

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,在頭四個位置時vectorsv.fetch(0)sv.fetch(1)sv.fetch(2)sv.fetch(3))應00000000000000000000000000000000,這相當於int的二進制表示爲0,但是當我嘗試在for -loop中打印矢量元素時,它直接顯示數字。是因爲我用sizeof(int)初始化它,它一次打印4個字節?

回答

0

是的,它一次打印四個字節,因爲您要求它打印整數。如果您想分別查看每個字節,則可以遍歷整個矢量並分別打印每個元素。在打印之前將char轉換爲int是個好主意,這樣你就可以得到數字而不是某個控制字符。

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

Live demo