皮皮网
皮皮网

【dionaea源码下载】【c memempty源码】【qq扫尾源码】stdvector源码

来源:赤峰来源码 发表时间:2024-12-22 15:50:48

1.std::sort 宕机源码分析
2.c++,能把头文件和源代码标注下,拜托各位大神了🙏,最好能把结果截图发给我。dionaea源码下载

stdvector源码

std::sort 宕机源码分析

       公司项目代码中发生了一次宕机事件,原因在于使用了std::sort,下面是具体的代码片段。

       编译命令:g++ sort.cpp -g -o sort,执行结果如下。

       最初存储的元素序列为:(0-1)(1-2)(2-2)(3-2)(4-2)(5-1)(6-1)(7-2)(8-2)(9-2)(-1)(-1)(-2)(-1)(-2)(-2)(-2)

       在调用std::sort的过程中,出现了非法元素:-0

       (-0)(-2)(-2)(-2)(9-2)(7-2)(4-2)(3-2)(2-2)(1-2)(8-2)(-1)(-1)(-1)(0-1)(6-1)(5-1)

       生成了core文件,c memempty源码使用gdb进行调试,发现是在删除操作时发生了宕机,具体原因是在std::sort排序过程中将vector写坏了。

       接下来,我们来分析一下std::sort的qq扫尾源码工作原理。

       std::sort的排序思想基于QuickSort,其基本思路是将待排序的数据元素序列中选取一个数据元素为基准,通过一趟扫描将待排序的元素分成两个部分,一部分元素关键字都小于或等于基准元素关键字,另一部分元素关键字都大于或等于基准元素关键字。fpga源码加密然后对这两部分数据再进行不断的划分,直至整个序列都有序为止。

       std::sort的空间复杂度最好为O(log2N),最坏为O(N),时间复杂度平均复杂度为O(NLog2N),社区源码排行稳定性为不稳定。

       HeapSort是std::sort中的一种实现,其建堆过程是建立大顶堆,时间复杂度平均为O(nLog2N),空间复杂度O(1),稳定性同样为不稳定。

       __partial_sortInsertSort是基于插入排序的一种改进,其基本思路是将待排序的数据元素插入到已经排好的有序表中,得到一个新的有序表。经过n-1次插入操作后,所有元素数据构成一个关键字有序的序列。

       __final_insertion_sort是插入排序的一种不稳定性解决方案,其空间复杂度为O(1),时间复杂度为O(n^2),稳定性为稳定。

c++,能把头文件和源代码标注下,拜托各位大神了🙏,最好能把结果截图发给我。

       C++代码:

       #include <iostream>

       #include <vector>

       #define MAX

       using namespace std;

       //重载函数:求数组元素的平均值

       double average(int arr[], int n)

       {

        double sum = 0.0;

        for(int i=0; i<n; i++)

        {

        sum += arr[i];

        }

        return sum / n;

       }

       //重载函数:求vect集合元素的平均值

       double average(vector<int> vect)

       {

        double sum = 0.0;

        for(int i=0; i<vect.size(); i++)

        {

        sum += vect.at(i);

        }

        return sum / vect.size();

       }

       int main()

       {

        int arr[MAX]; //数组

        int *p; //指针

        vector<int> vect; //向量对象

        int n; //整数数量

        int i;

        cout<<"n : ";

        cin>>n;

        for(i=0; i<n; i++)

        {

        cin>>arr[i]; //使用数组存储整数

        vect.push_back(arr[i]); //使用vect存储整数

        }

        p = arr; //使用指针存储整数(指向数组地址)

        //输出数组元素及平均值

        cout<<"数组元素:";

        for(i=0; i<n; i++)

        {

        cout<<arr[i]<<"  ";

        }

        cout<<endl<<"平均值:"<<average(arr, n)<<endl;

        //输出指针指向数组的元素及平均值

        cout<<"指针指向数组的元素:";

        for(i=0; i<n; i++)

        {

        cout<<*(p+i)<<"  ";

        }

        cout<<endl<<"平均值:"<<average(p, n)<<endl;

        //输出vector集合的元素及平均值

        cout<<"vector集合的元素:";

        for(i=0; i<vect.size(); i++)

        {

        cout<<vect.at(i)<<"  ";

        }

        cout<<endl<<"平均值:"<<average(vect)<<endl;

        return 0;

       }

       运行测试:

相关栏目:百科