【C++STL】algorithm头文件下常见函数使用

目录

    • min函数,max函数,abs函数
    • swap函数
    • reverse函数
    • next_permutation函数
    • fill函数
    • sort函数
    • lower_bound函数,upper_bound函数

直接上代码!

min函数,max函数,abs函数

#include 
#include 
using namespace std;

int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d", min(a, b));
    printf("%d", max(a, b));
    printf("%d", abs(a));
    return 0;
}

swap函数

#include 
#include 
using namespace std;

int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    swap(a, b);
    printf("%d %d", a, b);
    return 0;
}

reverse函数

#include 
#include 
#include 
using namespace std;

int main() {
    int n, x;
    scanf("%d", &n);
    vector<int> v;
    for (int i = 0; i < n; i++) {
        scanf("%d", &x);
        v.push_back(x);
    }
    //将v中的所有元素逆置(颠倒顺序)
    reverse(v.begin(), v.end());
    for (int i = 0; i < (int)v.size(); i++) {
        printf("%d", v[i]);
        if (i < (int)v.size() - 1) {
            printf(" ");
        }
    }
    return 0;
}
#include 
#include 
#include 
using namespace std;

int main() {
    string str;
    cin >> str;
    //输出逆置后的str
    reverse(str.begin(), str.end());
    cout << str;
    return 0;
}

next_permutation函数

#include 
#include 
#include 
using namespace std;

//使用algorithm头文件下的next_permutation函数生成[1,n]的全排列
int main() {
    int n, x;
    scanf("%d", &n);
    vector<int> v;
    for (int i = 1; i <= n; i++) {
        v.push_back(i);
    }
    do {
        for (int i = 0; i < n; i++) {
            printf("%d", v[i]);
            if (i < n - 1) {
                printf(" ");
            } else {
                printf("\n");
            }
        }
    } while (next_permutation(v.begin(), v.end()));
    return 0;
}

/*
输入:
3
输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
*/

fill函数

#include 
#include 
using namespace std;

//使用algorithm头文件下的fill函数将数组a中的前n个元素置为k;
int main() {
    int n, k, a[100];
    scanf("%d%d", &n, &k);
    fill(a, a + n, k);
    for (int i = 0; i < n; i++) {
        printf("%d", a[i]);
        if (i < n - 1) {
            printf(" ");
        }
    }
    return 0;
}
#include 
#include 
using namespace std;

//二维数组int a[3][5],使用algorithm头文件下的fill函数将a中的所有元素置为k
int main() {
    int n = 3, m = 5, k, a[3][5];
    scanf("%d", &k);
    fill(a[0], a[0] + n * m, k);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d", a[i][j]);
            if (j < m - 1) {
                printf(" ");
            } else {
                printf("\n");
            }
        }
    }
    return 0;
}

sort函数

#include 
#include 
using namespace std;

const int MAXN = 10;
int a[MAXN];

//使用algorithm头文件下的sort函数将n个正整数升序排序
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    sort(a, a + n);
    for (int i = 0; i < n; i++) {
        printf("%d", a[i]);
        if (i < n - 1) {
            printf(" ");
        }
    }
    return 0;
}
#include 
#include 
using namespace std;

const int MAXN = 10;
int a[MAXN];

使用algorithm头文件下的sort函数将n个正整数降序排序
bool cmp(int a, int b) {
    return a > b;
}

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    sort(a, a + n, cmp);
    for (int i = 0; i < n; i++) {
        printf("%d", a[i]);
        if (i < n - 1) {
            printf(" ");
        }
    }
    return 0;
}
#include 
#include 
#include 
using namespace std;

const int MAXN = 10;
string str[MAXN];

//使用algorithm头文件下的sort函数将n个字符串按字典序升序排序。
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> str[i];
    }
    sort(str, str + n);
    for (int i = 0; i < n; i++) {
        cout << str[i] << endl;
    }
    return 0;
}
#include 
#include 
#include 
using namespace std;

//结构体排序
struct Node {
    int x, y;
    Node(int _x, int _y) {
        x = _x;
        y = _y;
    }
};
//编写bool cmp(Node a, Node b)函数,使当a.x != b.x时返回a.x < b.x,否则返回a.y < b.y
bool cmp(Node a, Node b) {
    if (a.x != b.x) {
        return a.x < b.x;
    } else {
        return a.y < b.y;
    }
}
//先按x升序、x相同时按y升序
int main() {
    int n, x, y;
    scanf("%d", &n);
    vector<Node> v;
    for (int i = 0; i < n; i++) {
        scanf("%d%d", &x, &y);
        v.push_back(Node(x, y));
    }
    sort(v.begin(), v.end(), cmp);
    for (int i = 0; i < n; i++) {
        printf("%d %d\n", v[i].x, v[i].y);
    }
    return 0;
}

lower_bound函数,upper_bound函数

#include 
#include 
using namespace std;

const int MAXN = 10;
int a[MAXN];

//使用algorithm头文件下的lower_bound函数在n个升序的正整数中寻找第一个大于等于指定元素k的位置。
int main() {
    int n, k;
    scanf("%d%d", &n, &k);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    int pos = lower_bound(a, a + n, k) - a;
    printf("%d", pos + 1);
    return 0;
}
#include 
#include 
using namespace std;

const int MAXN = 10;
int a[MAXN];

//使用algorithm头文件下的upper_bound函数在n个升序的正整数中寻找第一个大于指定元素k的位置。
int main() {
    int n, k;
    scanf("%d%d", &n, &k);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    int pos = upper_bound(a, a + n, k) - a;
    printf("%d", pos + 1);
    return 0;
}

你可能感兴趣的:(C/C++算法相关,#,C++,STL,c++,算法,数据结构)