我在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>
实现的不完美吗?是否可以在没有多余成员的情况下实现它?
答案 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>