【发布时间】:2010-11-09 23:16:32
【问题描述】:
我有一个容器 std::vector,我想有效地将它拆分为子范围,每个子范围都有 x 项。不需要原始容器,因此项目应该被移动而不是复制到子范围中。
我已经设法使用复制进行拆分,但是我不确定如何使用移动分配进行拆分?
range.insert(range.end(), new_items.begin(), new_items.end());
while(range.size() >= x)
{
sub_ranges.push_back(std::vector<int>(range.begin(), range.begin() + x));
range = std::vector<int>(range.begin() + x, range.end());
}
编辑:
有些进展……还是不完全,而且有点难看
while(range.size() >= x)
{
std::vector<short> sub_range(x); // Unnecessary allocation?
std::move(range.begin(), range.begin() + x, sub_range.begin());
sub_ranges_.push_back(std::move(sub_range));
std::move(range.begin() + x, range.end(), range.begin());
range.resize(range.size() - x);
}
【问题讨论】:
标签: c++ c++11 range move move-semantics