研究了一下第四周(在 http://www.jianshu.com/p/f6405507d48a 中)的两个问题是:
1. Implementation of Emplace serious functions, compare to push_back, etc.
通过对右值引用和移动语义的学习,发现embrace函数实际上是接受一个右值引用作为参数的,然后使用移动构造函数来完成向容器中添加元素;以下是VS2013中的函数定义:
template void emplace_back(_Valty&&... _Val);
push_back有两个版本,一个是传统的使用左值引用作为参数,这样将会调用copy构造函数;另一个版本是使用右值引用作为参数,这样会调用移动构造函数,这一点好像和embrace类似?
这样使用移动构造函数的实现,效率会得到提升。
以上是我的想法。
参考:http://stackoverflow.com/questions/4303513/push-back-vs-emplace-back
提到了在VS2010中的embrace和push_back。
2. at的作用和[]的区别。
at会检查数组下标越界,并抛出异常;
[]数组越界是未定义行为,需要程序员自己负责,相应的效率会比at高一些。