c++
文章平均质量分 56
Dev-L
这个作者很懒,什么都没留下…
展开
-
归并排序/逆序数组对问题
题目出自Coursera Stanford 算法课程Week 2的Test :给定一个乱序的长100000的整数数组A,其元素值分别存放在data.txt的每一行中,各元素互不相等。求数组A中逆序对的数目。要求使用分治算法。其实解法就是将归并排序实现一遍,在归并(Merge)的时候引入计数器,统计逆序对数目。下面是C++ Code:#include <stdio.h>#include <vecto原创 2017-05-28 11:48:43 · 366 阅读 · 0 评论 -
背包九讲(附Cpp代码)
文档链接:http://love-oriented.com/pack/pack2alpha1.pdf1. 01背包1)题目:有n件物品和一个容量为v的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大2)输入:测试用例数 物品数 背包大小 n个物品的ci和wi3)代码:#include原创 2017-10-21 10:37:31 · 535 阅读 · 0 评论 -
Stack的实现
由于栈是一种表,因此任何实现表的方法都能实现栈。显然list和vector都支持栈的操作。栈的链表实现栈的第一种实现是单链表。我们通过在表的前端插入来实施push操作,通过删除表前端元素实施pop操作。top操作只是考查表前端的元素并返回它的值。有时也把pop操作和top操作合二为一。栈的数组实现栈的另一种实现避免了链而且可能是更流行的解决方案。它用到来自vector的back、push_back、原创 2017-07-20 08:32:34 · 503 阅读 · 0 评论 -
List的实现
本节我们提供list类模板的实现,在考虑设计时,我们需要提供如下4个类:List类本身,它包含连接到表两端的链、表的大小,以及一些方法。Node类,他很可能是一个私有的内嵌类。一个节点包含数据和指向前后两个节点的两个指针,以及一些适当的构造函数。const_iterator类,它抽象了为位置的概念,而且是一个公有的内嵌类。该const_iterator类储存一个指向“当前”节点的指针,并提供基原创 2017-07-19 15:05:10 · 349 阅读 · 0 评论 -
Vector的实现
本文模仿STL中的vector,自己实现其基本功能,主要包括:初始化列表形式的初始化 eg. vector<int> v{1,2,3,4,5};构造函数与析构函数,包括赋值构造、移动构造拷贝函数,包括赋值拷贝、移动拷贝基础API函数:resize( ), reserve( ), size( ), empty( )push_back( ), pop_back( ), begin( ), e原创 2017-07-16 21:46:44 · 424 阅读 · 0 评论 -
main函数参数列表
/* C++ Primer Exercise 10.33 main函数接受3个参数,加上其函数名共4个参数(即cmd下需要输入4个参数),argc表示参数总数n,其中argv[0]为可执行文件名,argv[1]为数据文件路径,argv[2]和argv[3]分别为保存奇数和偶数的文件路径。*/#include <fstream>#include <iterator>#i原创 2017-06-10 22:47:53 · 545 阅读 · 0 评论 -
大数乘法的分治策略C++实现
最近学习Coursera上的算法课,刚开始接触分治算法(Divide & Conquer),第一周的测试题为两个大位整数的乘法,结合自己自学的弱爆的C++,各种查资料还调了一整天的Bug才写出来个不完整的东西。只怪自己平时代码敲得少,不熟练。很多bug遇到过就会对此很敏感,所以多去造轮子,多尝试自己去实现才是最快的学习方法。哈哈哈,一堆废话,自勉之~下面是自己写的源码,其中还有许多不妥的地方,第一次原创 2017-05-26 21:11:02 · 1263 阅读 · 0 评论 -
【转】嗯,让我们彻底搞懂C/C++函数指针吧
摘要:这篇文章详细介绍C/C++的函数指针,请先看以下几个主题:使用函数指针定义新的类型、使用函数指针作为参数、使用函数指针作为返回值、使用函数指针作为回调函数、使用函数指针数组,使用类的静态函数成员的函数指针、使用类的普通函数成员的指针、定义函数指针数组类型、使用函数指针实现后绑定以及在结构体中定义函数指针。如果您对以上这几个主题都很了解,那么恭喜您,这篇文章不适合您啦~。在一些开源软件中,如Bo转载 2017-06-07 11:15:39 · 5315 阅读 · 1 评论 -
C++11 lambda表达式与函数对象
C++ lambda表达式与函数对象lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读。但是从本质上来讲,lambda表达式只是一种语法糖,因为所有其能完成的工作都可以用其它稍微复杂的代码来实现。但是它简便的语法却给C++带来了深远的影响。如果从广义上说,lamdba表达式产生的是函数对象。在类中,转载 2017-06-02 18:02:41 · 11051 阅读 · 0 评论 -
C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别
C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直转载 2017-05-28 11:22:19 · 578 阅读 · 0 评论 -
位操作基础篇之位运算符全面总结
在计算机中所有数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果,正因为位操作的这些优点,所以位操作在各大IT公司的笔试面试中一直是个热点问题。因此本文将对位操作进行如下方面总结: 位操作基础,用一张表描述位操作符的应用规则并详细解释。 常用位转载 2017-06-06 10:37:28 · 2126 阅读 · 1 评论 -
计数排序及其C++实现
计数排序 COUNTING_SORT计数排序假设n个输入元素中每一个都是在0到k区间内的一个整数。其中k为某个整数。当k=O(n)时,排序的运行时间为Θ(n).计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接吧x放到它在输出数组中的位置上了。例如,如果有17个元素小于x,则x就应该在第18个输出位置上。当有几个元素位置相同时,这一方案要略作修改。因为不能把他们原创 2017-05-30 21:56:55 · 3181 阅读 · 0 评论 -
堆排序原理及算法实现(最大堆)
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2] 或者Key[i]>=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[原创 2017-05-29 23:06:24 · 940 阅读 · 0 评论 -
冒泡排序C++实现
冒泡排序貌似是最简单的排序方法了,因为其破解时间复杂度为O(n^2),在数组比较大的时候,很少用到。其思想是:将但既然简单,也就简单的实现以下,只当是练习了一遍打字 ^_^ 还是直接贴代码://冒泡排序void BubbleSort(vector<int> &a){ int i,j; for (i=0;i<a.size();i++) //每次循环确定一个最大值 {原创 2017-05-29 19:42:19 · 779 阅读 · 0 评论 -
插入排序C++实现
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。待插入的位置 应该是第一个比带插入数值大的元素所在的位置,可以想象一下玩纸牌接完牌整原创 2017-05-29 18:48:25 · 504 阅读 · 1 评论 -
选择排序C++实现
算法描述选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。时间复杂度: O(n^2)空间复杂度: O(1)稳定性: 不稳定 (比如序列【5, 5, 3】第一趟就将第一个[5]与[3]交换,导致第原创 2017-05-29 17:44:06 · 462 阅读 · 0 评论 -
快速排序C++实现
快速排序为原址排序,无需分配额外的Temp内存,且期望时间复杂度为O(nlgn),可以通过交换数组中的第一个元素和随机一个元素的位置,达到随机化的目的,避开 bad case。下面是C++实现,原数组元素存放在data.txt文件中:选取第一个元素为主元#include <stdio.h>#include <vector>#include <iostream>#include <fstre原创 2017-05-29 11:28:10 · 478 阅读 · 0 评论 -
C++生成随机数的方法
刚接触到随机化算法,在快速排序中,为了避开不利的 Bad Case,最好在每次递归调用partition子程序时将随机选取主元。为了简便,可以直接将原主元值与随机元素值交换~ 这就要用到随机数了,查了下关于rand()函数的博客,摘抄下来:rand( )函数名: rand 功 能: 随机数发生器 用 法: int rand(void); 所在头文件: stdlib.h转载 2017-05-29 11:46:52 · 3426 阅读 · 0 评论 -
C++ cout输出格式总结
这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cout来完成一切需要的格式化输入输出功能(从非性能的角度而言)。更进一步而言,您还可以在、上使用这些格式化操作,从而代替sprintf和fprintf函数。为方便描述,下文仅以cout为例进行介绍。 一、综述转载 2017-11-20 11:45:18 · 24128 阅读 · 1 评论