2017-01-23 12 views
1
#include <iostream> 
#include<vector> 
using namespace std; 
bool a; 
char c; 
int main() { 

    vector<bool> bVec = { true,false,true,false,true}; 
    vector<char> cVec = { 'a', 'b', 'c', 'd', 'e' }; 
    cout<<sizeof(bVec);cout<<endl; 
    cout<<sizeof(cVec); 
    cout<<endl; 
    cout<<sizeof(a); 
    cout<<endl; 
    cout<<sizeof(c); 

    return 0; 
} 

Когда я скомпилирую этот код, я получаю размер cVec как 20 и размер bvec как 12. но почему размеры разные?Почему размер двух векторов <bool> bVec = {true, false, true, false, true}; vector <char> cVec = {'a', 'b', 'c', 'd', 'e'}; разные?

+1

'std :: vector < bool >' особый вид .. животное. См. Http://stackoverflow.com/questions/17794569/why-is-vectorbool-not-a-stl-container –

ответ

0

std::vector<bool> является специальным случаем std::vector, который хранит данные экономичным способом и возвращает объекты-прокси вместо bool& для управления данными. Таким образом, он обычно имеет разные данные элемента, а затем нормальный std::vector, следовательно, разницу в размерах.