【发布时间】:2016-05-19 12:59:11
【问题描述】:
我正在努力寻找改进my answer here 的方法。让我们将问题简化为:我想将输入容器划分为 vector 或 vectors,大小为 STEP,最后一个 vectors 应该有一个较小的如果输入容器中剩余的元素少于STEP,则我们称这个分区容器为bar。
我不想多次迭代我的输入或输出范围。我要解决的问题的要素很简单:
- 附加
bar构造vector,大小为min(STEP, distance(it, foo.end()) - 在构造容器后让
it指向advance(it, size(bar.back())) - 就地执行
vector构建
我对这个问题的回答的翻译是:
auto it = cbegin(foo);
for (auto i = size(foo); i > STEP; i -= STEP) {
bar.push_back(decltype(bar)::value_type(STEP));
for (auto internalIt = bar.back().begin(); internalIt != bar.back().end(); ++internalIt, ++it) {
*internalIt = *it;
}
}
bar.push_back(decltype(bar)::value_type(it, cend(foo)));
问题出在这一行:bar.push_back(decltype(bar)::value_type(STEP)) 我正在分配vector 并将其组件初始化为0。有没有更好的方法来做到这一点,在这种方法下我仍然只会遍历输入和输出范围一次?
【问题讨论】:
标签: c++ vector iterator initialization iteration