c++的一些常用数组函数

简介: 前两天再刷蓝桥杯题库的时候做到一道有思路但是因为用循环太复杂导致没写出来,后来看别人的题解的时候才知道原来要使用“全排列函数”,而我当时对这个函数没有一点影响了,所以我觉得我应该复习一些c++函数了,今天总结的是一些较为常见的数组函数。

全排列函数

  • 对函数的介绍

我个人的理解是:“它会把数组中元素的排列顺序都排列一遍后返回一个false,在此之前都返回的是true”,比如说一个数组{a,b,c},它会把{a,b,c},{a,c,b},{b,a,c},{b,c,a},{c,a,b},{c,b,a}都弄一遍。已知数组b[4]格式:next_permutation(b,b+4)。

  • 例题

7254是一个不寻常的数,因为它可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次,输出所有这样的不同的式子(不能重复)结果小的先输出,结果相同的,较小的乘数较小的先输出。

  • 思路
首先命名一个包含一到九的数组,题目给的式子有三部分组成,经计算第一部分一定是一位四位数,所以有数组的前四个元素组成,二三部分就要分情况讨论了,可以是一个个位数成一个四位数,也可以二位数乘以一个三位数,所以需要分两次写,题头说1~9正好只出现一次,所以这是一道数字排列问题,满足式子条件就输出,考的就是“全排列函数”,代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
 
int main() {
    int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
 
    do {
        int sum = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
        int x = a[4];
        int y = a[5] * 1000 + a[6] * 100 + a[7] * 10 + a[8];
        int x1 = a[4] * 10 + a[5];
        int y1 = a[6] * 100 + a[7] * 10 + a[8];
        if (num == x * y) {
            cout << num << " = " << x << " x " << y << endl;
        } else if (num == x1 * y1) {
            cout << num << " = " << x1 << " x " << y1 << endl;
        }
    } while (next_permutation(a, a + 9));
 
    return 0;
}

反转函数

  • 对函数的介绍

反转函数就是头对尾逐渐向里的元素交换,比如数组{1,4,2,5,8,4},用反转数组后就是{4,8,5,2,4,1}

已知数组b[4]格式:reverse(b,b+4)

  • 代码
#include <iostream>
#include <algorithm>
using namespace std;
 
int main() {
    char b[8] = {'a', 'n', 'v', 'd', 'g', 'e', 'p'};
    reverse(b, b + 7);
    puts(b);
    return 0;
}

运行结果:
image.png

这里注意命名char[]时,要比元素大一位,因为末端需要以"\0"结尾,如是

char b[7] = {'a', 'n', 'v', 'd', 'g', 'e', 'p'};

就会出现如下乱码:

image.png

填充替换函数

  • 函数的介绍

已知数组b[7],fill(b,b+7,1)可以把数组b全部都填充为1,replace(b,b+7,1,2)可以把b数组的所有元素替换为2。

  • 代码演示
#include <iostream>
#include <algorithm>
using namespace std;
 
int main() {
    int b[7];
    fill(b, b + 7, 1);
 
    for (int i = 0; i < 7; i++) {
        cout << b[i];
    }
 
    return 0;
}

执行结果:

image.png

在上面加入这行代码 replace(b, b + 7, 1, 2);

执行结果:

image.png

相关文章
|
1月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
41 5
|
4月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
4月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
165 6
|
4月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
62 0
|
4月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
93 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
4月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
715 1
|
4月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
46 3
|
4月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
67 1
|
4月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
45 3
|
4月前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(三)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作