Hum*_*awi 2 c++ vector compiler-optimization c++11
编译器优化此代码是否合法且可能:
std::vector<T> my_vec(10);
//some code
my_vec.erase(my_vec.begin()+5,my_vec.end());
成:
std::vector<T> my_vec(10);
//some code
my_vec.resize(5);
我在问,因为我总是读到std::vector::resize从最后擦除时更好std::vector::erase.但是,我认为这std::vector::erase更具可读性.
类型要求不同.
vector::resize(单参数版本)不要求MoveAssignable,但要求DefaultInsertable和MoveInsertable,因为它也可以用来种植容器.
vector::erase是相反的; 它需要MoveAssignable但不需要其他,因为它可以用来擦除中间.
vector::pop_back 不需要上述任何一项,但一次只能弹出一个元素,因此您必须多次调用它.
在任何理智的实现中都不应该存在可感知的性能差异.