如何使用 std::rotate 將向量沿正確方向旋轉 K 步?是否有比 std::rotate 更好或更快的方法來旋轉向量(陣列)?
uj5u.com熱心網友回復:
如何使用 std::rotate 將向量沿正確方向旋轉 K 步?
第二個引數 tostd::rotate是旋轉后新的第一個元素的迭代器。因此,要逐步進行正確的旋轉1,這意味著end() - 1應該是新的第一個等等。
廣義:
template<class... T>
void rotate_right(std::vector<T...>& v, std::size_t steps) {
if(steps %= v.size())
std::rotate(v.begin(), std::prev(v.end(), steps), v.end());
}
是否有比 std::rotate 更好或更快的方法來旋轉向量(陣列)?
不,我認為沒有。如果您發現它太慢,您可以使用使用并行執行策略之一的版本,看看是否可以加快速度。例子:
#include <execution>
template<class... T>
void rotate_right(std::vector<T...>& v, std::size_t steps) {
if(steps %= v.size())
std::rotate(std::execution::par, v.begin(), std::prev(v.end(), steps), v.end());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486409.html
下一篇:為陣列生成無限顏色
