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 输出结果

posted @ 2020-10-21 22:46  mohist  阅读(363)  评论(0编辑  收藏  举报