c++11之algorithm算法库新增is_sorted和sorted_until
0.时刻提醒自己
Note: vector的释放
1.is_sorted
1.1 功能
检查 [first, last) 中的元素是否以不降序排序
1.2 异常
若算法无法分配内存,则抛出 std::bad_alloc
1.3 返回值
若范围中的元素已按不降序排序则为 true,否则,返回false
1.4 代码用法
// 期末成绩
int score[] = {99, 77, 30, 80, 90, 20};
// 1.排序前结果
std::cout << "排序前结果:";
for_each(std::begin(score), std::end(score), [](const int& item) {std::cout << item << " "; });
std::cout << " : is_sorted: " << std::boolalpha << std::is_sorted(std::begin(score), std::end(score)) << '\n';
// 2.执行排序
std::sort(std::begin(score), std::end(score));
// 3.排序后结果
std::cout << "排序后结果:";
for_each(std::begin(score), std::end(score), [](const int& item) {std::cout << item << " "; });
std::cout << " : is_sorted: " << std::boolalpha << std::is_sorted(std::begin(score), std::end(score)) << '\n';
1.5 输出结果
2. is_sorted_until
2.1 功能
检验范围 [first, last) ,并寻找始于 first 且其中元素已以不降序排序的最大范围。
2.2 异常
若算法无法分配内存,则抛出 std::bad_alloc
2.3 返回值
始于 first 且其中元素已以升序排序的最大范围。即满足范围 [first, it) 已排序的最后迭代器 it 。
2.4 Note
std::is_sorted_until 对空范围及长为 1 的范围均返回 last 。
2.5 用法
// 期末成绩
int score[] = {99, 77, 30, 80};
std::cout << "排序前:";
// 1.找到第一个没有按升序排列的元素
auto it = std::is_sorted_until(std::begin(score), std::end(score));
if (std::end(score) != it)
std::cout << "第一个没有升序排列的元素是:" << *it << std::endl;
else
std::cout << "数组元素全部按照升序排序\n";
// 2.执行排序
std::sort(std::begin(score), std::end(score));
// 3.再次核查数组排序情况
std::cout << "排序后:";
auto it_find = std::is_sorted_until(std::begin(score), std::end(score));
if (std::end(score) != it_find)
std::cout << "第一个没有升序排列的元素是:" << *it_find << std::endl;
else
std::cout << "数组元素全部按照升序排序\n";
2.6 输出结果