C++算法
一直在路上25
热爱技术,坚持才是硬道理
展开
-
C++ 继承的 虚基表内存模型,看了下 写的不错
c++中一个类中无非有四种成员:静态数据成员和非静态数据成员,静态函数和非静态函数。 1.非静态数据成员被放在每一个对象体内作为对象专有的数据成员。 2.静态数据成员被提取出来放在程序的静态数据区内,为该类所有对象共享,因此只存在一份。 3.静态和非静态成员函数最终都被提取出来放在程序的代码段中并为该类所有对象共享,因此每一个成员函数也只能存在一份代码实体。在转载 2016-11-24 10:39:30 · 981 阅读 · 0 评论 -
Effective STL学习笔记
vector其实是数组的一个STL表现,比数组好用。#include #include using namespace std;int main(){ vector vi; vi.push_back(1); vi.push_back(2); int* i; for (i=&vi[0];i { co原创 2014-05-12 16:20:47 · 486 阅读 · 0 评论 -
C的链表的概念应用
链表有一个头指针变量head,它存放原创 2014-04-13 15:18:59 · 597 阅读 · 0 评论 -
删除在第二个字符串中出现的字符
#include const int LEN = 256;void Delete(char* first, char* second){ int i; int hashtable[LEN] = {0}; char *p = second; while (*p) { hashtable[*p] = 1;转载 2014-04-26 21:10:58 · 564 阅读 · 0 评论 -
C++内存分布
预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(stat转载 2014-04-26 13:19:57 · 595 阅读 · 0 评论 -
C++ virtual 继承
今天专门看了一下虚继承的东西,以前都没怎么用过,具体如下:父类: class CParent { .... }; 继承类的声明比较特别: class CChild : virtual public CParent { .... } 请问,这个"virtual"是什么作用及含义? -------------转载 2014-04-09 15:23:50 · 516 阅读 · 0 评论 -
链表总结
链表是面试笔试中考的频率最高的,原创 2014-04-23 09:22:00 · 559 阅读 · 0 评论 -
signal函数声明的理解
先看函数原型:void (*signal(int signo, void (*func)(int)))(int);对于看惯了类似unsigned int sleep(unsigned int seconds);这种声明的人们来说,signal的声明到底是个啥啊?signal是个函数,后面应该是形参啊,但为什么形参后面又来个形参,我们使用的时候可没有后面的(int)啊? 问题就出在这,难以理解转载 2014-04-28 20:54:32 · 2085 阅读 · 0 评论 -
堆数据结构小结
堆是用来表示元素集合的一种数据结构。从根本上转载 2014-05-06 09:19:29 · 573 阅读 · 0 评论 -
Ubuntu搭建开发环境
sudo apt-get remove vim-common sudo apt-get clean && sudo apt-get purge sudo apt-get update && sudo apt-get install vim转载 2014-04-15 10:02:10 · 527 阅读 · 0 评论 -
学长写的一个处理大数据多个文件的排序算法
/**************************************************************************** * Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved* $Id$ * ***********************************************原创 2014-04-26 19:20:26 · 1332 阅读 · 0 评论 -
背包问题
思想:首先找到一个最大值进行比较,然后依次循环遍历:void main(int argc, char* argv[]){ int k,w,v; printf("物品的中枢:"); scanf("%d",&n); for(totv=0,k=0;k { printf("\n第%d种物品的质量和价值:",k+1);原创 2014-01-04 18:50:27 · 487 阅读 · 0 评论 -
两个队列实现为一个栈
#include #include usingnamespace std; templatetypenameT> classStack_by_queue { public: Stack_by_queue(){}; ~Stack_by_queue(){};转载 2014-04-21 11:11:54 · 486 阅读 · 0 评论 -
C++泛型算法
标准库并未给每个容器都定义成员函数来实现这些操作,而是定义了一组泛型算法,称他们为算法原创 2014-04-12 09:18:16 · 568 阅读 · 0 评论 -
c++语言概念
c++函数声明后面的const例如有这样一个函数int getValue(Elem &it) const { ... }加const 和不加 const 有什么区别呢?2楼 ftkghost (小鹏) 回复于 2004-11-07 01:48:06 得分 20这是用在类成员函数的声明和定义中,表示函数可以对const对象进行操作,但是不能改变数据成员的内容#inclu转载 2013-12-18 15:38:14 · 558 阅读 · 0 评论 -
多线程六 经典线程同步之信号量Semaphore
1、首先来看看如何使用信号量 信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。第一个CreateSemaphore函数功能:创建信号量函数原型:HANDLECreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitia转载 2015-08-24 16:39:10 · 489 阅读 · 0 评论 -
MFC 浏览文件夹
另外参考:http://hi.baidu.com/original/item/9817473c6c82bc637d034b53浏览文件夹,其实用的是Shell里的API[cpp] view plaincopyvoid OnXXXBrowse() { CString strFolderPath;转载 2015-05-13 18:56:50 · 665 阅读 · 0 评论 -
extern "C"
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十转载 2015-05-12 17:42:30 · 447 阅读 · 0 评论 -
堆与堆排序
优先级队列优先级队列是一个由相同类型的数据元素组成的集合,其中每个数据项都带有一个特定的优先级。它支持insert元素操作,findMin访问优先级最小元素的操作,deleteMin删除优先级最小元素的操作,当然,也可能是支持findMax访问优先级最大元素的操作,deleteMax删除优先级最大元素的操作,以需求而定。有两种很自然的方法来实现优先级队列:一种是使用无序队列(数组、转载 2014-06-02 15:59:09 · 736 阅读 · 0 评论 -
堆排序
最近看STL源码的时候,对堆排序算法的思想记不起来了,特此找了点资料觉得不错转载下,以备下次之用:选择排序算法,是选择最值,然后将其调整到合适位置。如何确定最值,则是选择排序算法的关键。 简单排序算法是通过比较,确定最值的位置。假设未排序元素个数为N,则遍历一趟,需比较N-1次,再遍历下一趟时,需比较N-2次。但是,第二趟比较完全是独立的,没有利用第一次比较的信息。因为,第一趟比较时也没有把比较信转载 2014-06-02 15:54:10 · 661 阅读 · 0 评论 -
二分查找需要注意的Bug
#include #include using namespace std;//下面一个移位是一样的,>>相当于除去2,主要是要用right-left,否则对于大数据来说会产生溢出问题。切记int binarySearch(int arr[],int len,int number){ int left=0; int right=len-1; in原创 2014-05-13 14:53:56 · 1208 阅读 · 0 评论 -
STL set的使用
set集合容器使用了一种称为红黑树的平衡原创 2014-04-12 13:13:43 · 504 阅读 · 0 评论 -
sizeof详解
sizeof的详解原创 2014-05-13 19:53:34 · 1124 阅读 · 0 评论 -
copy的使用
#include #include #include #include #include using namespace std;int main () { typedef vector IntVector; typedef istream_iterator IstreamItr; typedef ostream_iterator转载 2014-04-12 09:55:42 · 595 阅读 · 0 评论 -
随便写的一个选择排序
#include using namespace std;void swap(int &i,int &j){ int temp; if (i>j) { temp=i; i=j; j=temp; }}void sort(int* ptr,int n){ for (int i原创 2014-04-12 19:51:02 · 568 阅读 · 0 评论 -
找出一组数中的最小k个数 适合海量数据处理的方法
#include#include #include using namespace std;typedef multiset> intSet;typedef multiset>::iterator setIterator;void GetLeastNumbers(const vector& data,intSet& leastNumbers,int k){原创 2014-04-26 16:44:26 · 898 阅读 · 0 评论 -
STL学习
#include #include #include using namespace std;int main(void){ vector vec; vector::const_iterator cit; vec.push_back("dog"); vec.push_back("cat"); vec.push_back("fis原创 2014-04-10 18:24:03 · 484 阅读 · 0 评论 -
基数排序
#include int data[10]={4,11,9,8,7,6,5,4,3,2};typedef struct list{ int data; int next;}List;List bucket[10];List d[10];int maxbit(int data[],int n){ int i,c,p; int d原创 2014-01-05 13:37:57 · 596 阅读 · 0 评论 -
青蛙跳台阶问题
(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。(2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?分析:1)当n = 1, 只有1中跳法;当n = 2时,有两种跳法;当n = 3 时,有3种跳法;当n = 4时,有5种跳法;当n = 5时,有8种跳法;转载 2014-04-21 15:25:45 · 572 阅读 · 0 评论 -
阿里实习生面试题
输出一个字符串中的所有子串:#include #include using namespace std;void SubOutput(const char* str){ for(int i=0;i { for(int j=i;j { for(int k=i;k {原创 2014-03-16 14:40:19 · 797 阅读 · 0 评论 -
遍历数组查找其中数字出现次数大于一半的
方法三 这个方法借用了别人的思路。 在这里我做一下简单的分析。 这个算法的时间复杂度是O(n),另外用了两个辅助变量。 k用于临时存储数组中的数据,j用于存储某个数出现的次数。 开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k 因为指定的数出现的次数大于原创 2014-03-13 19:03:04 · 775 阅读 · 0 评论 -
找出一个数组中各个数字出现的次数
看了prime第一章,突发奇想了一个问题,如何写一个算法去找出一个数组中各个数字出现的次数呢?方法一: 可以使用我们经常写的算法,冒泡排序之类的,首先对数组进行排序,然后根据prime中第一章的写法。算出每个数字出现的次数。#include #include using namespace std;int main(int argc,char *argv[]){原创 2014-03-13 16:13:19 · 4232 阅读 · 1 评论 -
linux学习
gcc是编译C的。C++要用g++;比如 g++ hello.cpp -o hello生成一个执行文件。后面用./hellp 编译生成输出结果。原创 2014-03-01 18:59:48 · 624 阅读 · 0 评论 -
C++指针
指针对很多学Java的人可能听起来是件很麻烦的事情,但我作为一个先学java现在学C++的人来说,却发现指针是非常可爱的,下次给大家列出一些c++指针的用法,方便大家和自己学习!指针是一个地址,而指针变量是一个存放地址的变量!eg:int i; int *ipointer = &i;这时ipinter就是一个指针变量,存放变量i的地址,也可以这样声明:int *ipointer ;原创 2013-12-19 11:32:28 · 665 阅读 · 0 评论 -
学习网址
http://www.vckbase.com/index.php/wv/300 这是一个学习C++的好网址!原创 2014-01-05 18:48:37 · 696 阅读 · 0 评论 -
ACE,一个C++的框架
ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间转载 2014-01-05 17:57:12 · 12657 阅读 · 0 评论 -
wxWindows入门
学习所需的背景知识 1.已经会用 C++ 写些简单程序的人, 并对 OOP (Object-Oriented Programming) 有基本了解.2.知道如何设定编译器, 以及如何连结产生一个可执行档, 如果你写的程序在编译时一直出现 link error 或是 cannot find xxxx.h 这类的讯息, 而你自己无法解决这种问题, 代表你目前不适合学 wxWindo转载 2014-01-05 19:43:52 · 3424 阅读 · 0 评论 -
C++写一个COM组件
本文提供一个完全用C++实现的进程内(DLL)COM服务器,不要ATL或MFC提供任何支持。用这种方式编写COM对象可以让你深入地洞察到COM处理进程内服务器的方法以及COM是如何创建类工厂的。利用本文提供的这个简单框架你可以实现很基本的COM组件,如外壳扩展(Shell Extensions)等。如果你在使用过程中发现了任何问题,请将它反馈vckbase@public.hk.hi.cn。以下转载 2014-01-05 18:37:41 · 1046 阅读 · 0 评论 -
STL
STL被内建在你的编译系统之内。STL的版本很多,常见的有HP STL、PJ STL、 SGI STL等。在C++标准中,STL被组织为下面的13个头文件:algorithm>、deque>、functional>、iterator>、array>、vector>、list>、、map>、、memory>、numeric>、queue>、set>、、stack>和utility>。在实际的原创 2014-01-05 18:00:00 · 638 阅读 · 0 评论 -
选择排序
在数据结构中,我们都有去学过选择排序,无非是从后面一个一个的选择最小的数字:#include #include void SelectSort(int *pnData,int nLen){ int i,j,nIndex,nTemp; for(i=0;i { nIndex=i; for(j=i+1;j原创 2014-01-05 11:05:41 · 535 阅读 · 0 评论