• C++学习笔记——01


    一、C++开发环境安装

    安装步骤

    注意:新手别安装Visual Studio 我后面使用,很多头文件都找不到,可能是不会用。可以先安装MinGW

    MinGW安装步骤

    MinGW下载地址

    在这里插入图片描述

    可以选择一个版本下载,这里用最新的8.1.0。
    在这里插入图片描述

    解压后:
    在这里插入图片描述

    后面需要配置一下环境变量:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    测试:cmd到控制台,输入:

    gcc -v
    
    • 1

    在这里插入图片描述

    Clion配置MinGW :

    在设置中找到:File | Settings | Build, Execution, Deployment | Toolchains

    在这里插入图片描述

    注意:如果已经下载了Visual Studio 系统可能默认使用这个执行链(SDK)可以更改一下默认使用(如下图),或者在刚刚的页面直接删除就好,后面需要再添加回来。
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    二、CLion输出中文乱码

    (一)修改File | Settings | Editor | File Encodings

    注意:全局修改,不要在一个项目中修改。

    这里就是全局修改。
    在这里插入图片描述

    在这里插入图片描述

    (二)最后有两种方式实现

    1. 修改编码方式
      在这里插入图片描述
      在这里插入图片描述

    2. 修改Registry…
      快捷键掉出设置页面Ctrl+Shift+Alt+/
      取消勾选
      在这里插入图片描述

    注意:两种方式用一种就好。

    (三)cout输出中文报错

    在这里插入图片描述
    如果报上面的错误,可以把文件编码改成gbk。哪个文件报错改哪个。
    在这里插入图片描述

    三、C++官方文档

    C++官方文档由微软提供。
    官方文档地址

    比较详细的英文文档

    比较详细的中文文档

    四、hello world

    1. 不写 using namespace std; 输出
    #include
     
    int main(){
       std::cout<<"Hello world"<<std::endl;
    return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 写using namespace std; 输出
    //头文件,每个人c++程序都有
    #include 
    // 表示默认使用c++提供的标准库。这个标准库以std开头,当函数、对象同名时用命名空间加以区分
    using namespace std;
    
    int main() {
    	// 输出Hello, World!,结束后换行
        cout << "Hello, World!" << endl;
        //输出,不换行
        cout << "1";
        cout << "2";
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    五、输入和输出

    输入:cin>>变量。空格或者换行结束输入。
    输出:cout<<变量;

    #include 
    
    using namespace std;
    
    int main() {
        //输入:先定义变量,再将输入的内容传给变量
        int i;
        float f;
        double d;
        string s;
        cin >> i;
        cin >> f;
        cin >> d;
        cin >> s;
        //输出
        cout << "输出" << i << f << d << s;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    六、自定义头文件

    头文件可以将一些函数的声明与实现分离,当需要调用函数时,只需要导入头文件

    (一)创建头文件

    注意:如果源文件需要用到一些库,在自定义的头文件中导入其他头文件

    在这里插入图片描述

    //导入标准库和一些三方库
    #include "iostream"
    using namespace std;
    
    //函数定义
    int max(int a,int b);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (二)创建源文件

    编写函数的具体实现。
    在这里插入图片描述

    //
    // Created by wuyuj on 2022/8/20.
    //
    
    //这里需要将源文件与头文件进行绑定。
    #include "max.h"
    
    //实现函数
    int max(int a, int b) {
        cout << "获取最大值:" << endl;
        return a > b ? a : b;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (三)导入自定义头文件并调用函数

    注意:自定义(三方)的头文件是用 “” 引号声明的。官方的是用 <> 尖括号

    //这个头文件已经包含了:#include "iostream"  \n  using namespace std;
    #include "max.h"
    
    int main() {
    	//直接调用函数。
        cout << max(2, 1) << endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    七、官方库函数使用介绍

    (一)来源

    参考微软C++文档

    (二)标准库分类,便于检索

    类别标头
    算法, ,
    原子操作11
    C 库包装器11 a b、、11、、11b11 a b11 a b、11、11 a b11
    概念20
    容器
    序列容器11、、11、、
    有序关联容器,
    无序关联容器1111
    容器适配器,
    容器视图20
    错误和异常处理、 、 11
    常规实用工具1720, , 17 , 171111, 11, 11, 11, 11, 11, 11, 11, 1117
    I/O 和格式设置11、、17、、c20
    迭代器
    语言支持11 a20、202011、、、 20
    本地化11 a、、
    数学和数字2011, , 1111, 11
    内存管理、、1711
    多线程处理111111111411
    范围20
    正则表达式11
    字符串和字符数据17, , 1117
    时间11

    (三)具体库查看介绍——algorithm库

    点击函数查看详解

    名称说明
    adjacent_find搜索相等或满足指定条件的两个相邻元素。
    all_of当给定范围中的每个元素均满足条件时返回 true
    any_of当指定元素范围中至少有一个元素满足条件时返回 true
    binary_search测试已排序的范围中是否有等于指定值的元素,或在二元谓词指定的意义上与指定值等效的元素。
    clamp
    copy将一个源范围中的元素值分配到目标范围,循环访问元素的源序列并将它们分配在一个向前方向的新位置。
    copy_backward将一个源范围中的元素值分配到目标范围,循环访问元素的源序列并将它们分配在一个向后方向的新位置。
    copy_if复制给定范围中对于指定条件为 true 的所有元素。
    copy_n复制指定数量的元素。
    count返回范围中其值与指定值匹配的元素的数量。
    count_if返回范围中其值与指定条件匹配的元素的数量。
    equal逐个元素比较两个范围是否相等或是否在二元谓词指定的意义上等效。
    equal_range在排序的范围中查找符合以下条件的位置对:第一个位置小于或等效于指定元素的位置,第二个位置大于此元素位置,等效意义或用于在序列中建立位置的排序可通过二元谓词指定。
    fill将相同的新值分配给指定范围中的每个元素。
    fill_n将新值分配给以特定元素开始的范围中的指定数量的元素。
    find在范围中找到具有指定值的元素的第一个匹配项位置。
    find_end在范围中查找与指定序列相同的最后一个序列,或在二元谓词指定的意义上等效的最后一个序列。
    find_first_of在目标范围中搜索若干值中任意值的第一个匹配项,或搜索在二元谓词指定的意义上等效于指定元素集的若干元素中任意元素的第一个匹配项。
    find_if在范围中找到满足指定条件的元素的第一个匹配项位置。
    find_if_not返回指示的范围中不满足条件的第一个元素。
    for_each将指定的函数对象按向前顺序应用于范围中的每个元素并返回此函数对象。
    for_each_n
    generate将函数对象生成的值分配给范围中的每个元素。
    generate_n将函数对象生成的值分配给范围中指定数量的元素,并返回到超出最后一个分配值的下一位置。
    includes测试一个排序的范围是否包含另一排序范围中的所有元素,其中元素之间的排序或等效条件可通过二元谓词指定。
    inplace_merge将两个连续的排序范围中的元素合并为一个排序范围,其中排序条件可通过二元谓词指定。
    is_heap如果指定范围中的元素形成堆,则返回 true
    is_heap_until如果指定范围形成直到最后一个元素的堆,则返回 true
    is_partitioned如果给定范围中对某个条件测试为 true 的所有元素在测试为 true 的所有元素之前,则返回 false
    is_permutation确定给定范围的元素是否形成有效排列。
    is_sorted如果指定范围中的元素按顺序排序,则返回 true
    is_sorted_until如果指定范围中的元素按顺序排序,则返回 true
    iter_swap交换由一对指定迭代器引用的两个值。
    lexicographical_compare逐个元素比较两个序列以确定其中的较小序列。
    lower_bound在排序的范围中查找其值大于或等效于指定值的第一个元素的位置,其中排序条件可通过二元谓词指定。
    make_heap将指定范围中的元素转换到第一个元素是最大元素的堆中,其中排序条件可通过二元谓词指定。
    max比较两个对象并返回较大对象,其中排序条件可通过二元谓词指定。
    max_element在指定范围中查找最大元素的第一个匹配项,其中排序条件可通过二元谓词指定。
    merge将两个排序的源范围中的所有元素合并为一个排序的目标范围,其中排序条件可通过二元谓词指定。
    min比较两个对象并返回较小对象,其中排序条件可通过二元谓词指定。
    min_element在指定范围中查找最小元素的第一个匹配项,其中排序条件可通过二元谓词指定。
    minmax比较两个输入参数,并按最小到最大的顺序将它们作为参数对返回。
    minmax_element在一次调用中执行由 min_elementmax_element 执行的操作。
    mismatch逐个元素比较两个范围是否相等或是否在二元谓词指定的意义上等效,并找到出现不同的第一个位置。
    move移动与指定范围关联的元素。
    move_backward将一个迭代器的元素移动到另一迭代器。 移动从指定范围的最后一个元素开始,并在此范围的第一个元素结束。
    next_permutation重新排序范围中的元素,以便使用按字典顺序的下一个更大排列(如果有)替换原有排序,其中“下一个”的意义可通过二元谓词指定。
    none_of当给定范围中没有元素满足条件时返回 true
    nth_element对一系列元素进行分区,正确定位区域中序列的第 n 个元素,以便其前面的所有元素都小于或等于它,并且序列中之后的所有元素都大于或等于它。
    partial_sort将范围中指定数量的较小元素按非降序顺序排列,或根据二元谓词指定的排序条件排列。
    partial_sort_copy将源范围中的元素复制到目标范围,其中源元素按降序或二元谓词指定的其他顺序排序。
    partition将范围中的元素分为两个不相交的集,满足一元谓词的元素在不满足一元谓词的元素之前。
    partition_copy将条件为 true 的元素复制到一个目标,将条件为 false 的元素复制到另一目标。 元素必须来自于指定范围。
    partition_point返回给定范围中不满足条件的第一个元素。 元素经过排序,满足条件的元素在不满足条件的元素之前。
    pop_heap移除从堆顶到范围中倒数第二个位置之间的最大元素,然后将剩余元素形成新堆。
    prev_permutation重新排序范围中的元素,以便使用按字典顺序的下一个更大排列(如果有)替换原有排序,其中“下一个”的意义可通过二元谓词指定。
    push_heap将范围末尾的元素添加到包括范围中前面元素的现有堆中。
    random_shuffle将范围中 N 个元素的序列重新排序为随机 N! 种序列中的 可能排列之一。
    remove从给定范围中消除指定值,而不影响剩余元素的顺序,并返回不包含指定值的新范围的末尾。
    remove_copy将源范围中的元素复制到目标范围(不复制具有指定值的元素),而不影响剩余元素的顺序,并返回新目标范围的末尾。
    remove_copy_if将源范围中的元素复制到目标范围(不复制满足谓词的元素),而不影响剩余元素的顺序,并返回新目标范围的末尾。
    remove_if从给定范围中消除满足谓词的元素,而不影响剩余元素的顺序,并返回不包含指定值的新范围的末尾。
    replace检查范围中的每个元素,并替换与指定值匹配的元素。
    replace_copy检查源范围中的每个元素,并替换与指定值匹配的元素,同时将结果复制到新的目标范围。
    replace_copy_if检查源范围中的每个元素,并替换满足指定谓词的元素,同时将结果复制到新的目标范围。
    replace_if检查范围中的每个元素,并替换满足指定谓词的元素。
    reverse反转范围中元素的顺序。
    reverse_copy反转源范围中元素的顺序,同时将这些元素复制到目标范围
    rotate交换两个相邻范围中的元素。
    rotate_copy交换源范围中两个相邻范围内的元素,并将结果复制到目标范围。
    sample
    search在目标范围中搜索其元素与给定序列中的元素相等或在二元谓词指定的意义上等效于给定序列中的元素的序列的第一个匹配项。
    search_n在范围中搜索具有特定值或按二元谓词的指定与此值相关的指定数量的元素。
    set_difference将属于一个排序的源范围、但不属于另一排序的源范围的所有元素相并到一个排序的目标范围,其中排序条件可通过二元谓词指定。
    set_intersection将属于两个排序的源范围的所有元素相并为一个排序的目标范围,其中排序条件可通过二元谓词指定。
    set_symmetric_difference将属于一个而不是两个排序的源范围的所有元素相并为一个排序的目标范围,其中排序条件可通过二元谓词指定。
    set_union将至少属于两个排序的源范围之一的所有元素相并为一个排序的目标范围,其中排序条件可通过二元谓词指定。
    sort将指定范围中的元素按非降序顺序排列,或根据二元谓词指定的排序条件排列。
    shuffle使用随机数生成器重新排列给定范围中的元素。
    sort_heap将堆转换为排序的范围。
    stable_partition将范围中的元素分为两个不相交的集,满足一元谓词的元素在不满足一元谓词的元素之前,并保留等效元素的相对顺序。
    stable_sort将指定范围中的元素按非降序顺序排列,或根据二元谓词指定的排序条件排列,并保留等效元素的相对顺序。
    swap在两种类型的对象之间交换元素值,将第一个对象的内容分配给第二个对象,将第二个对象的内容分配给第一个对象。
    swap_ranges将一个范围中的元素与另一大小相等的范围中的元素交换。
    transform将指定的函数对象应用于源范围中的每个元素或两个源范围中的元素对,并将函数对象的返回值复制到目标范围。
    unique移除指定范围中彼此相邻的重复元素。
    unique_copy将源范围中的元素复制到目标范围,彼此相邻的重复元素除外。
    upper_bound在排序的范围中查找其值大于指定值的第一个元素的位置,其中排序条件可通过二元谓词指定。
  • 相关阅读:
    set和map的学习
    QT数据库,实现数据库增删改查
    单链表的结点的修改(思路分析) [数据结构][Java]
    redis stream 实现消息队列
    去除做题痕迹的软件有哪些?安利三款好用的
    第四十九章 开发自定义标签 - 在action之外使用<csr>标签
    c++高级篇(一) —— 初识Linux下的进程控制
    Harmony OS—UIAbility的使用
    华硕平板k013me176cx线刷方法
    03大数据技术之Hadoop(HDFS)
  • 原文地址:https://blog.csdn.net/a123123sdf/article/details/126439521