vector <bool>和其他向量的sizeof

时间:2017-02-18 14:13:01

标签: c++ visual-studio vector

我在VS2015编译器上看到sizeof(std::vector<bool>)是16字节,但对于其他类型,例如for vector<int>,sizeof只有12个字节(第一个和最后一个指针+容量,每个4个字节)。我见过vector<bool>的实现,它包含一个基础vector<unsigned int>(12个字节)和它自己的大小(4个字节)。但底层矢量也包含其大小,这是不需要的,因为可以从内部vector<bool>的大小轻松计算。我找不到任何裁员的理由。这是Visual Studio中vector<bool>实现的不完美吗?是否可以在没有多余成员的情况下实现它?

1 个答案:

答案 0 :(得分:3)

假设您在List<Employee> employees = new List<Employee>(); private void addEmployee_Click(object sender, EventArgs e) { List<Employee> employees = new List<Employee>(); employees.Add(new Employee() { egn = egnInput.Text, names = namesInput.Text, proffesion = professionList.Text, office = officeList.Text, salary = Double.Parse(salaryInput.Text), joinDate = DateTime.Parse(joinDatePicker.Text) }); MessageBox.Show("Служителя бе добавен успешно!"); egnInput.Clear(); namesInput.Clear(); professionList.Text = ""; officeList.Text = ""; salaryInput.Clear(); joinDatePicker.Text = ""; } 为32位的平台上存储了48个bool

最里面的向量无法包含1½个元素,因此它必须包含两个元素,然后封装类会记住两个unsigned int中的“第一个”48位是有意义的,并且最后16场目前毫无意义。

Dinkumware本可以选择使用除unsigned int以外的其他内容作为最里面的容器,以避免冗余,但显然他们非常正确地认为这将完全浪费时间,以便下次无法获得。< / p>