美文网首页
c++常用的STL

c++常用的STL

作者: 桐人_ | 来源:发表于2019-03-12 21:20 被阅读0次

c++ 中常用的内置函数

标签: c++


1. algorithm中处理数组/vect的函数

1.可以处理两种数据结构的函数只要将参数vect.begin()和array以及vect.end()和array+n(n为元素个数)相互转换就可以处理不同的结构了,下面是只给出了vector的参数形式。(注:下面的函数都是返回一个指向目标元素的iterator,并且可以用*iterator来输出目标元素,所以接下来当做返回的是一个地址)

函数头 函数功能
sort(vect.begin(),vect.end(),function) 无function默认为升序排序
reverse(vect.begin(),vect.end()) 逆置数组,在原有的数组上面修改数组
max_element(vect.begin(),vect.end()) 返回数组中最大元素的地址
min_element(vect.begin(),vect.end()) 返回数组中最小元素的地址
count(vect.begin(),vect.end(),x) 返回数组中x出现的次数
find(vect.begin(),vect.end(),x) 返回数组中第一次出现x的地址,不存在否则返回最后一个元素的地址(注:find函数操作数组时第二个参数为array+n-1,n为数组的大小)
next_permutation(vect.begin(),vect.end()) 使用数组元素生成一种新的排列
prev_permutation(vect.begin(),vect.end()) 使用数组元素生成上一种排列
binary _search(vect.begin(),vect.end(),x) 基于有序数组进行二分查找x,存在返回1否则返回0
lower_bound(vect.begin(),vect.end(),x) 返回数组中第一个不小于x的数的地址
upper_bound(vect.begin(),vect.end(),x) 返回数组中第一个大于x的数的地址

(注:以上3个函数应是基于升序排序的数据进行操作)

2. math.h库中的一些方法

方法
log10(double x)
log(double x)
pow(double x, double y)
sqrt(double x)

3. iomanip库中的格式控制函数

函数原型 函数功能
setw(int i) 预设宽度,不够宽度前面空格补齐
setfill(char c) 预设宽度中没使用完的宽度用c填充
setbase(int i) 将数字设置为i进制
setprecision(int i) 设置有效数字位数
setiosflags(ios::right) 输出右对齐
setiosflags(ios::left) 输出左对齐
setiosflags(ios::fixed) 与setprecision合用输出定点小数

4. 其他一些常用的内置函数

头文件 函数原型 函数功能
algorithm max,min(value1, value2) 比较返回较大/较少值
algorithm swap(value1,value2) 交换value1和value2的值
numeric accumulate(array.first, array.last, init) 返回值为init + 数组元素求和。
cstring memset(void* str, int ch, size_t n) 用 ch 初始化首地址为str,内存大小为n的空间

5. 一些简单的技巧

  • 根据max_element(arr, arr+n)-arr,可以获得最大元素的下标。同理可以用来求得最小元素的下标,或者用来查找某一个元素的位置。
  • 使用binary_search(arr, arr+n, x),查找x效率会高很多。
  • 使用upper_bound(arr, arr+n, x)-lower_bound(arr, arr+n, x)来求得x在数组中的元素个数。

6. 关于algorithm函数的一些实例代码

//自定义升序函数
bool down_function(int i, int j) { return i > j; }

int main() {
    int arr[] = { 10, 12, 23, 10, 5, 2, 22, 20, 20, 11 };
    vector<int> vect(arr, arr + 10);
    
    //sort函数默认排序
    sort(vect.begin(), vect.end());
    sort(arr, arr + 10);

    //vector的新的一种访问方式
    cout << "sort vect: ";
    for (int i = 0; i < vect.size(); ++i)
        cout << vect.at(i) << " ";
    cout << endl << "sort array: ";
    for (int i = 0; i < 10; ++i)
        cout << arr[i] << " ";
    
    //自定义排序,up_function()不需要传入参数
    sort(vect.begin(), vect.end(), down_function);
    cout << endl << "sort vect by down_function: ";
    for (int i = 0; i < vect.size(); ++i)
        cout << vect[i] << " ";

    //reverse函数使用
    reverse(arr, arr + 10);
    cout << endl << "reverse array: ";
    for (int i = 0; i < 10; ++i)
        cout << arr[i] << " ";
    cout << endl;

    //max_element函数的使用
    cout << "max_element: " << *max_element(arr, arr + 10) << endl;

    //min_element函数的使用
    cout << "min_element: " << *min_element(arr, arr + 10) << endl;

    //count函数的使用
    cout << "count 1: " << count(arr, arr + 10, 1) << endl << "count 10: " << count(arr, arr + 10, 10) << endl;

    //find函数的使用
    cout << "find 10: " << *find(arr, arr + 9, 10) << endl << "find 15: " << *find(arr, arr + 9, 15) << endl;

    //binary_search函数的使用
    sort(arr, arr + 10);
    cout << "search 10: " << binary_search(arr, arr + 10, 11) << endl << "search 15: " << binary_search(arr, arr + 10, 15) << endl;

    //lower_bound和upper_bound函数的使用
    sort(vect.begin(), vect.end());
    auto p = lower_bound(vect.begin(), vect.end(), 10);
    auto q = upper_bound(vect.begin(), vect.end(), 10);
    cout << "第一个不小于10的元素位置为:" << p - vect.begin() << endl;
    cout << "第一个大于10的元素位置为:" << q - vect.begin() << endl;

    //next_permutation和prev_permutation函数的使用
    for (int i = 0; i < 10; ++i)
        cout << arr[i] << " ";
    next_permutation(arr, arr + 10);
    cout << endl << "next_permutation: ";
    for (int i = 0; i < 10; ++i)
        cout << arr[i] << " ";
    prev_permutation(arr, arr + 10);
    cout << endl << "prev_permutation: ";
    for (int i = 0; i < 10; ++i)
        cout << arr[i] << " ";
    system("pause");
    return 0;
}
}

输出结果

sort vect: 2 5 10 10 11 12 20 20 22 23
sort array: 2 5 10 10 11 12 20 20 22 23
sort vect by down_function: 23 22 20 20 12 11 10 10 5 2
reverse array: 23 22 20 20 12 11 10 10 5 2
max_element: 23
min_element: 2
count 1: 0
count 10: 2
find 10: 10
find 15: 2
search 10: 1
search 15: 0
第一个不小于10的元素位置为:2
第一个大于10的元素位置为:4
2 5 10 10 11 12 20 20 22 23
next_permutation: 2 5 10 10 11 12 20 20 23 22
prev_permutation: 2 5 10 10 11 12 20 20 22 23

相关文章

  • 读书笔记17.06.03

    C++ STL:Listlist是C++标准模版库(STL,Standard Template Library)中...

  • 第二章 C++ STL 泛型编程 1

    一、STL 概述 STL——C++标准模板库,定义了常用的数据结构和算法。提供三种类型的组件:容器、迭代器和算法。...

  • c++常用的STL

    c++ 中常用的内置函数 标签: c++ 1. algorithm中处理数组/vect的函数 1.可以处理两种数据...

  • [C++] STL 容器

    参考:[C++] STL 容器 (一) - 基本介紹[C++] STL 容器 (二) - Iterator 部分示例:

  • C++STL整理

    C++ STL中最基本以及最常用的类或容器string、vector、set、list、map string 处理...

  • STL之参考文献

    C++标准库是离不开模板的,STL占了C++标准库80%以上。 学习STL(c++ 98)的主要参考: gcc 3...

  • C++ STL 学习笔记

    C++ STL 学习笔记

  • c++ 常用STL整理

    最近在练习C++编程,做了一些牛客和力扣上面的题目,发现常用的C++ STL 有以下几种,对此进行简要总结,以便自...

  • 字符串

    字符串的实现(C++实现) 实现字符串的构造及其常用的接口函数,深入掌握理解字符串的实现 C++ / STL 中s...

  • 任务列表

    C++ 《C++ primer》、《STL源码解析》、《effective C++》、《深度搜索c++对象模型》 ...

网友评论

      本文标题:c++常用的STL

      本文链接:https://www.haomeiwen.com/subject/dsepuqtx.html