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   
#include   
  
int main() {  
    std::vector 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 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库结合使用)

你可能感兴趣的:(每日一个C++基础系列,c++,算法,开发语言)