基本上,我有一個向量vect。我想有效地將vect 的一部分從結尾移到開頭。例子:
前向量= {1,2,3,4,5,6,7}
將最后兩個元素從結束移動到開始:
后向量= {6,7,1,2,3,4,5}
現在,我有以下功能:
template <class ElementType>
void endToStart(std::vector<ElementType>& vect, size_t startPos)
{
std::vector<ElementType> temp;
temp.reserve(vect.size());
for (auto i = startPos; i < vect.size(); i)
{
temp.push_back(vect[i]);
}
for (auto i = 0; i < startPos; i)
{
temp.push_back(vect[i]);
}
vect.swap(temp);
}
有沒有更有效的方法來做到這一點?
uj5u.com熱心網友回復:
看起來你需要std::rotate:
#include <algorithm> // std::rotate
#include <iostream>
int main() {
std::vector<int> vect = {1,2,3,4,5,6,7};
std::rotate(vect.begin(), vect.begin() 5, vect.end());
// ^^^^^^^^^^^^^^^^
// the new first position
for(auto v : vect) std::cout << v << ' ';
}
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329620.html
標籤:C
