将向量元素移动到向量的后面
Moving a vector element to the back of the vector
是否有比删除元素并将其重新添加到后面更好的方法(更快或更少的代码符号)?
template <typename T>
void moveItemToBack(std::vector<T>& v, size_t itemIndex)
{
T tmp(v[itemIndex]);
v.erase(v.begin() + itemIndex);
v.push_back(tmp);
}
您可以使用标准库中的std::rotate
完成此操作。因为这不会改变向量的大小,所以也不会触发重新分配。你的函数看起来像这样:
template <typename T>
void moveItemToBack(std::vector<T>& v, size_t itemIndex)
{
auto it = v.begin() + itemIndex;
std::rotate(it, it + 1, v.end());
}
最快的方法可能是将它与最后一个元素
交换template <typename T>
void moveItemToBack(std::vector<T>& v, size_t itemIndex)
{
std::swap(v[itemIndex], v.back()); // or swap with *(v.end()-1)
}
一个操作!当然std::swap
必须与T
一起工作
你可以避免额外的变量
v.push_back(v[itemIndex]);
v.erase(v.begin() + itemIndex);
如果你经常从向量的中间删除,并且可以重写你的代码,使它不需要随机访问,你可以通过使用链表(std::list
)来提高效率。
相关文章:
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 如何将所有指针从一个向量移动到另一个向量?
- 如何在C++中有效地将数组移动到向量
- 在将其尺寸较大的向量移动到容量较小的向量之前,是否可以通过使用Reserve()来提高代码性能
- C 可以使用MOVE SEMATICS将数据从一个向量移动到另一个向量
- 在deque实现中将1/2一个向量移动到另一个向量
- 使用擦除-删除范例将元素从一个向量移动到另一个向量
- 在C++中将对象从一个向量移动到另一个向量(LEMON 库)
- 从向量移动初始化priority_queue
- 如何将唯一指针从一个向量移动到另一个唯一指针向量
- 从字符串和向量移动以不拥有任何堆内存
- STL 向量:移动向量的所有元素
- 通过向量移动类对象
- C++ 将元素从一个向量移动到另一个向量
- 在c++中将元素从一个向量移动到另一个向量
- 从一个带有一个分配器的向量移动到另一个带有分配器的向量
- 将一个向量移动到另一个,地址没有更新
- std::数据结构中的向量移动语义
- 将一个对象向量移动到另一个向量
- 将unique_ptrs从一个向量移动到另一个向量