C++面试八股文:std::array如何实现编译器排序?

某日二师兄参加XXX科技公司的C++工程师开发岗位第25面:

面试官:array熟悉吗?

二师兄:你说的是原生数组还是std::array?

面试官:你觉得两者有什么区别?

二师兄:区别不是很大,原生数组(非动态数组)和std::array都在栈上开辟空间,初始化的时候需要提供数组长度,且长度不可改变。有一点区别的是,std::array提供了安全的下标访问方法at,当下标越界时会抛出异常。

面试官:还有其他区别吗?

二师兄:让我想想。。。在当作参数传递时,原生数组会退化为指针,而std::array会保留类型和长度信息。

面试官:好的。知道空数组的长度和长度为0的std::array对象有什么区别吗?

二师兄:(这也太刁钻了吧。。)空数组的长度应该是0,但是长度为0的std::array对象的长度是1,因为它是空类。

面试官:如果一个类型的拷贝构造函数和拷贝赋值运算符是被删除的,可以使用std::array存储它吗?

二师兄:当然可以。只是不能传递这个std::array对象,而只能传递这个对象的引用或指针。

面试官:你觉得arrayvector的性能哪个好?

二师兄:array的性能更好,array的内存分配在栈上,编译时候确定需要在栈上开辟的空间。vector的元素存在堆上,需要开辟和释放堆内存。但vector更灵活,如果能提前确定数据量,使用reserve函数一次性开辟空间,性能和array没有太大的差距。

面试官:好的。你刚才说array能在编译时候确定需要在栈上开辟的空间,请问<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值