C++之STL算法基础--遍历与算法

一、STL容器使用方法

1.1 STL简介

STL是C++标准库中的一个模板库,全称为Standard Template Library,它提供了一系列的通用数据结构和算法。stl包括六大组件,其中3个主要组件:算法(algorithm)、容器(container)、迭代器(iterator)和3个辅助组件:配置器(allocators)、适配器(adapters)、函数对象(function object)。stl中几乎所有的代码都采用了(T)模板类和(T)模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机制。

1.2 STL高级函数

1.2.1 遍历实现

1.迭代器遍历方式:遍历的实现主要取决于STL的迭代器函数,通过迭代器获取位置信息进行数据访问。

函数名描述返回值类型
begin()返回一个指向容器中第一个元素的迭代器。迭代器
end()返回一个指向容器中最后一个元素之后位置的迭代器。迭代器
rbegin()返回一个指向容器最后一个元素之前的反向迭代器。反向迭代器
rend()返回一个指向容器第一个元素之前的反向迭代器。反向迭代器
#include <vector>  
#include <iostream>  
  
int main() {  
    std::vector<int> vec = {1, 2, 3, 4, 5};  
    for (auto it = vec.begin(); it != vec.end(); ++it) {  
        std::cout << *it << " ";  
    }  
    return 0;  
}

2.使用下标进行遍历。

for(int idx =0;idx != numbers.szie(); ++idx) {  
    cout << numbers[idx] <<"";  
}  
cout << endl;

3.使用C++11的基于范围的for循环遍历。

std::vector<int> v = {1, 2, 3, 4, 5};  
for(const auto &i : v) {     //元素的遍历过程i
    std::cout << i << " ";  
}  
std::cout << std::endl;

注意:C++11的基于范围是一种新的循环语法,它允许程序员更简洁地遍历容器中的元素。基于范围意味着我们只需要指定容器的起始和结束迭代器,然后循环会自动迭代并处理每个元素。

for (auto element : container) {  
    // 处理element  
}

在上面的代码中,container是一个表示容器的名称,element是每个迭代的变量名,它将自动解引用以访问容器中的元素。这种语法不需要显式地声明迭代器,也不需要编写循环条件语句,因此代码更加简洁和易读。

1.2.2 常见算法表格

类别算法名功能
排序算法sort对元素进行排序
stable_sort对元素进行稳定排序(相同元素的相对顺序保持不变)
merge将两个已排序的序列合并为一个排序的序列
stable_merge将两个已排序的序列合并为一个稳定排序的序列(相同元素的相对顺序保持不变)
partial_sort将序列部分排序,指定前N个元素为排序后的元素
Partial_sort_copy将序列的部分元素复制并排序,返回排序后的序列
查找算法find在序列中查找某个元素,返回第一个出现的迭代器位置
find_if在序列中查找满足某个条件的元素,返回第一个出现的迭代器位置
binary_search在已排序的序列中查找某个元素,返回其迭代器位置或未找到的迭代器位置
lower_bound在已排序的序列中查找第一个大于或等于给定值的元素,返回其迭代器位置或未找到的迭代器位置
upper_bound在已排序的序列中查找第一个大于给定值的元素,返回其迭代器位置或未找到的迭代器位置
equal_range在已排序的序列中查找范围[l, r]内第一个大于或等于给定值的元素,返回其迭代器位置或未找到的迭代器位置
遍历/变换算法transform对序列中的每个元素应用一个函数,并将结果存储在另一个序列中(可以与algorithm库结合使用)
swap对于STL容器中的swap成员函数,如vector、list等,其功能是交换两个容器的内容。这个函数会交换两个容器中的元素,而不仅仅是交换值。在交换过程中,元素会被重新排序,以保持正确的顺序。
fill将序列中的每个元素替换为某个给定的值(可以与algorithm库结合使用)
fill_n将序列中的前N个元素替换为某个给定的值(可以与algorithm库结合使用)
generate使用一个函数生成序列中的每个元素(可以与algorithm库结合使用)
generate_n使用一个函数生成序列中的前N个元素(可以与algorithm库结合使用)
最大最小算法max_element返回序列中最大元素的迭代器位置(可以与algorithm库结合使用)
min_element返回序列中最小元素的迭代器位置(可以与algorithm库结合使用)
max_value返回序列中的最大值(可以与algorithm库结合使用)
min_value返回序列中的最小值(可以与algorithm库结合使用)
  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值