C++中的STL算法库如何使用?(find/sort/copy示例)

STL算法库提供与容器解耦的通用函数,操作迭代器;find线性查找并返回迭代器,sort对随机访问容器排序,copy安全复制需确保目标空间足够。

STL算法库是C++标准库中非常实用的一部分,它提供了一组与容器解耦的通用函数,操作对象是迭代器而非具体容器类型。只要容器支持相应迭代器(如vector、list、array等),就能直接使用这些算法,无需自己重写逻辑。

find:查找元素是否存在

find在指定范围内线性查找第一个匹配值,返回指向该元素的迭代器;未找到则返回末尾迭代器(如end())。

注意:必须包含#include gorithm>,且元素需支持==比较。

  • 用法示例:
#include 
#include 
#include 

int main() { std::vector v = {3, 1, 4, 1, 5}; auto it = std::find(v.begin(), v.end(), 4); if (it != v.end()) { std::cout << "找到,位置:" << (it - v.begin()) << "\n"; // 输出:2 } }

sort:对随机访问迭代器容器排序

sort要求迭代器支持随机访问(如vector、array、deque),不能用于list(可用list::sort成员函数)。

默认升序,也可传入自定义比较函数(如std::greater降序,或lambda)。

  • 基础用法:
std::vector v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end()); // → {1, 1, 3, 4, 5}

// 降序 std::sort(v.begin(), v.end(), std::greater());

// 自定义规则:按绝对值排序 std::sort(v.begin(), v.end(), [](int a, int b) { return std::abs(a) < std::abs(b); });

copy:安全复制一段数据到另一容器

copy不检查目标空间是否足够,因此目标容器需提前分配好空间(如resize或reserve),或使用back_inserter适配器自动追加。

  • 常见写法对比:
std::vector src = {10, 20, 30};
std::vector dst1(src.size()); // 预分配
std::copy(src.begin(), src.end(), dst1.begin()); // OK

std::vector dst2; std::copy(src.begin(), src.end(), std::back_inserter(dst2)); // 自动push_back

// 复制到C数组也行(确保空间够) int arr[10]; std::copy(src.begin(), src.end(), arr);

基本上就这些。关键是记住三个要素:头文件、迭代器区间[left, right)、目标空间要安全。用熟了比手写循环更简洁可靠。