
C++
先熟悉头文件中的算法,很多时候这样能写出更简洁的代码。就像一个宝藏库,里面有众多常见算法。然而,不少人只会使用std::sort,这使得很多好东西都被闲置浪费了。像any_of、all_of、none_of、find_if等算法,能减少日常代码逻辑里的循环繁杂之处;remove和remove_if再配合erase,不但能让代码更简洁,还能减少错误,毕竟新手在遍历容器时删除元素不是那么容易理解;还有nth_element、next_permutation等工具,用于做算法题是极为方便的。
C++中的丰富程度在各类编程语言里是独一无二的,若不能熟练掌握实在是一种浪费。学习有个好去处——hackingcpp,那里绘制了一些既生动又实用的卡片。
不但有整体的,也有细节的,就像这样:
算法细节的描绘也十分形象。

LG
这些卡片对入门和提高都大有裨益。绝大多数算法,看名字和注释就能用了,浏览卡片就能大致了解有哪些算法,之后便可灵活运用。只有极少数算法可能要多看些例子,比如inclusive_scan系列,其作用看似是数值算法,不过写某些逻辑时也有巧妙用处。自
C++20起,标准库中有了ranges。ranges中的view或许要到
C++26才会完全成熟可用,但其中的a
LGorithm已经很成熟了。它比
C++98的a
LGorithm更易用,传参更简便,可读性佳,编写时也更不容易出错。以前的容器都没有cont
AIns方法,不过
C++23对此进行了改进。像string、set、map、unordered_map等容器都有cont
AIns了。这样就不用再写那种用find的迭代器和容器的end比较的繁琐代码了。附hackingcpp链接: