是
v.erase(v.begin(), v.end());
一样快
v.clear();
?
我不关心额外的函数调用等小开销,编译器会内联这些东西。
我问的原因是因为我有如下代码:
v.erase(v.begin(), last_it);
last_it 通常是结束迭代器,但并非总是如此。我知道不是从末尾擦除一个向量是有代价的,因为向量中的后面的元素需要被复制下来。在 last_it 不是结束迭代器(罕见)的情况下,我可以忍受。但是当我基本上想清除向量时,我不想引入这样的开销。所以我考虑这样写我的代码:
if (last_it == v.end())
{
v.clear();
}
else
{
v.erase(v.begin(), last_it);
}
我想知道这是否有必要避免擦除整个向量的性能损失。如果没有惩罚,我宁愿保持我的代码清晰并使用单行语句。