如果我有两个std::deque
,并且我想将第一个n
对象从一个开始移动到另一个的开头,那么最好的方法是什么?执行以下操作:
template <typename T>
void fn(std::deque<T>& src)
{
std::deque<T> storage;
size_t i = /* some calculated value between 0 and src.size() */;
storage.insert(storage.begin(), src.begin(), src.begin()+i);
src.erase(src.begin(), src.begin()+i);
// ... other stuff ...
}
将创建T对象的副本。我想我可以做类似的事情(未经测试,仅作为示例):
template <typename T>
void fn(std::deque<T>& src)
{
std::deque<T> storage;
size_t i = /* some calculated value between 0 and src.size() */;
for (auto& it = std::reverse_iterator<decltype(src.begin()>(src.begin()+i)
; it != std::reverse_iterator<decltype<src.begin()>(src.begin())
; ++it)
{
storage.push_front(std::move(*it));
}
src.erase(src.begin(), src.begin()+i);
// ... other stuff ...
}
但我想知道,有没有一种算法可以解决这个问题?
答案 0 :(得分:10)
storage.insert(storage.begin(),
std::make_move_iterator(src.begin()),
std::make_move_iterator(src.begin()+i));
src.erase(src.begin(), src.begin()+i);