c++ - 有没有办法按段对向量进行排序?
问题描述
如果我有一个包含奇数个元素的向量并且想要分段对向量进行排序,我如何构建一个循环来执行此操作但不会访问任何超出范围的内容?
像这样的数组:(
[4, 5, 6, 3, 10, 2, 0]
大小:7)
我想以 2 为单位进行排序,所以它变成了这样:
[4, 5, 3, 6, 2, 10, 0]
我在想这样的事情,但是向量会访问超出范围的 arr[8] 。
for(int i = 0; i < arr.size(); i = i + 2) {
sort(arr.begin() + i, arr.begin() + i - 1);
}
解决方案
只需获取小于或等于数组大小的第一个偶数,然后将其用作循环的停止条件。
int main(){
std::array<int, 7> arr = {4, 5, 6, 3, 10, 2, 0};
auto size = arr.size() % 2 ? arr.size() - 1 : arr.size(); // if odd subtract one else use size
for (size_t i = 0; i < size - 2; i += 2)
std::sort(arr.begin() + i, arr.begin() + i + 2);
for (auto e : arr)
std::cout << e << " ";
}
输出:
4 5 3 6 10 2 0
推荐阅读
- android - Check if view is animating
- python-3.x - 如何访问其他类中的对象
- html - 为什么 Safari 用巨大的文本打印这个页面,就好像它被放大了一样?
- python - How to subtract n minutes from list of datetime and return the datetime that matches
- node.js - 如何在 Node Web 应用程序中实现应用程序级通知?
- android - 地理围栏设置/配置应该从活动类完成还是可以使用服务类完成?
- jquery - 使用有效样式查找带有 jQuery 的 HTML 元素(继承自 CSS 类的样式,在元素上不明确)
- asp.net - How to Change AspNet Identity Password Hash to AspNet.Core Identity Password Hash
- java - 如何声明每个实现 Comparable 的 Java 对象列表
- javascript - 按超过 2 层深度的条件合并嵌套对象