标准::矢量::擦除与"swap and pop"
std::vector::erase vs "swap and pop"
从向量中删除元素的"正常"方法是这样的:
vec.erase(vec.begin() + index);
但从理论上讲,这样做会更快:
if (vec.size() > 1)
{
std::iter_swap(vec.begin() + index, vec.end() - 1);
vec.pop_back();
}
else
{
vec.clear();
}
有什么理由不使用后者吗?
第二种情况不保留向量中元素的顺序。 如果这是一个排序向量或顺序很重要,那么您刚刚在第二种情况下打破了它,其中第一种情况将保持顺序不变。
相关文章:
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- 在c++队列中使用pop和visit实现线程安全
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 我可以使用 std::vector::swap 来修改共享向量吗?
- Valgrind 在 std::string::swap 中报告 SIGILL
- 对函数的 out 字符串参数使用 swap 与赋值
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- a,b = b,a in python vs std::swap() in C++
- 使用 std::swap 禁用 ADL
- 如何使用 std::swap with array?
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- C++ 带模板的链表 - 如何创建 pop()?
- std::stack的奇怪行为,pop()返回相同的值
- 为什么以下 POP 功能无法在主机或设备 (CUDA) 上运行?
- 为什么 std::swap 不适用于<bool> Clang/Win(英语:Clang/Win)下的矢量元素?
- C++ 中类成员的堆栈的 pop() 函数
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 没有相应 POP 的编译指示包(推送)会导致堆栈粉碎
- 智能指针的 std::swap 是否保证引用保持不变?
- 标准::矢量::擦除与"swap and pop"