1. STL算法与函数适配器:容器操作的灵魂搭档
第一次接触STL时,我被vector和map这些容器的强大功能震撼,但真正让我感受到STL威力的,却是那些看似不起眼的算法和函数适配器。记得刚工作时,我需要处理一个包含数万条记录的vector,手动写循环查找和排序不仅效率低下,代码还特别冗长。直到同事告诉我:"STL算法+适配器就是为这种场景而生的",我才恍然大悟。
STL(Standard Template Library)之所以成为C++的基石,不仅因为它提供了高效的容器,更因为它配套的算法和适配器让容器操作变得异常简单。算法是预定义的通用操作(如排序、查找、遍历等),而函数适配器则像转换器,让算法能适配不同需求的容器操作。它们共同构成了STL的"灵魂搭档"。
2. STL算法精要解析
2.1 算法分类与核心操作
STL算法主要分为以下几类:
-
非修改序列算法:不改变容器内容,如:
cpp复制find(v.begin(), v.end(), 42); // 查找值为42的元素 count_if(v.begin(), v.end(), [](int x){ return x > 0; }); // 统计正数个数 -
修改序列算法:会改变容器内容,如:
cpp复制sort(v.begin(), v.end()); // 默认升序排序 replace(v.begin(), v.end(), 0, 1); // 将所有0替换为1 -
排序及相关操作:包括排序、二分查找等:
cpp复制binary_search(v.begin(), v.end(), 42); // 二分查找 nth_element(v.begin(), v.begin()+5, v.end()); // 使第5个元素处于正确位置 -
数值算法:如累加、内积等:
cpp复制accumulate(v.begin(), v.end(), 0); // 求和 inner_product(v1.begin(), v1.end(), v2.begin(), 0); // 向量内积
