C/C++
文章平均质量分 88
Senvenno27
Life is not easy, just enjoy IT.
展开
-
C/C++中关于qsort的使用
C/C++中有一个快速排序的标准库函数 qsort ,在stdlib.h 中声明,其原型为:void qsort(void *base, int nelem, unsigned int width, int ( * pfCompare)( const void *, const void *)); 使用该函数,可以对任何类型的一维数组排序。该函数参数中,base 是待排序数组的起始地址,转载 2017-08-08 21:10:51 · 270 阅读 · 0 评论 -
C/C++,用0x3f3f3f3f表示无穷大,0xc0c0c0c0表示无穷小
#include <iostream>#define MaxN 0x3f3f3f3f#define MinN 0xc0c0c0c0int main(void){ printf("%d %d\n",MaxN,MinN); //1061109567, -1061109568 return 0;}但是,我一度怀疑了自己的眼睛,#include <stdio.h>#defi原创 2017-08-23 20:37:52 · 8428 阅读 · 0 评论 -
__int64 与long long 的区别, C/C++的64位整型 不同编译器间的比较
//为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数 //结果VC中还是认为是32位的,显然不合适 //typedef signed long int TSint64; //typedef unsigned long int TUint64; //ANSI C中规定long long才能表示64位 //参转载 2017-08-24 09:16:41 · 5117 阅读 · 0 评论 -
指针与引用的区别:简单的笔试或面试回答
指针是实体,它指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名引用只能在定义时被初始化一次,之后不可变;指针可变引用没有 const,指针有 const,const 的指针不可变;引用不能为空,指针可以为空;“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小,(32位下 即4个字节);指针和引用的自增(++)运算意义不一样;原创 2017-09-06 20:18:41 · 473 阅读 · 0 评论 -
描述内存分配方式以及它们的区别?
1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。 2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。 3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何转载 2017-09-06 20:56:45 · 2833 阅读 · 0 评论 -
单链表的逆转:迭代形式和递归形式
struct Node{ int num; Node *next;}; // 注意这个地方,这个分号占一半的分!!!1.迭代版的:(明明知道是这样子,但写的时候,要想很久,常考,背!!!)/* 注意 head是头结点 */Node *ReverseLink( Node *head){ if(NULL == head) return NULL;原创 2017-09-07 13:33:56 · 844 阅读 · 0 评论 -
使用STL:vector创建二维数组
使用vector创建二维数组有很多方便的地方,对比直接动态创建二维数组 http://blog.csdn.net/u011361880/article/details/77505380 发现vector真的是非常的方便,可以直接创建,重点是可以直接初始化,并且,可以初始化为非0元素。而memset只能初始化为0.同时,vector 中的内建有内存管理,当 vector 离开它的生存期原创 2017-08-30 22:14:19 · 8365 阅读 · 0 评论 -
【算法研究与实现】最小二乘法直线拟合
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/1.原理 在现实中经常遇到这样的问题,一个函数并不是以某个数学表达式的形式给出,而是以一些自变量与因变量的对应表给出,老师讲课的时候举的个例子是犯罪人的身高和留下的脚印长,可以测出一些人的数据然后得到一张表,它反应的是一个函数,回归的意思就是将它还原成数学表达式,这个式子也称为经验表达式,之所以叫转载 2017-09-17 11:29:23 · 1395 阅读 · 0 评论 -
百度:度度熊想去商场买一顶帽子,买第三便宜的帽子
度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少? 输入描述: 首先输入一个正整数N(N <= 50),接下来输入N个数表示每顶帽子的价格(价格均是正整数,且小于等于1000)输出描述: 如果存在第三便宜的帽子,请输出这个价格是多少,否则输出-1输入例子1: 10 10 10 10 10 20 20 30 3原创 2017-08-22 15:04:25 · 532 阅读 · 0 评论 -
搜狐[编程题] 袋鼠过河.一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个
时间限制:1秒 空间限制:32768K 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米,如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,给定每个弹簧的力原创 2017-08-27 20:23:25 · 4271 阅读 · 3 评论 -
搜狐[编程题]彩色宝石项链.有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等
时间限制:1秒 空间限制:32768K有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶,翡翠和钻石这五种,我要你从项链中截取连续的一小段还给我,这一段中必须包含所有的这五种宝石,剩下的部分你可以带走。如果无法找到则一个也无法带走。请帮助学者找出如何切分项链才能原创 2017-08-27 18:30:19 · 3611 阅读 · 0 评论 -
度度熊回家:一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。
时间限制:1秒 空间限制:32768K 一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。 但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离? 输入描述:输入一个正整数N, N <= 50。接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的原创 2017-08-22 16:04:36 · 1604 阅读 · 3 评论 -
大数取模:一般取模+技巧取模+快速幂取模+欧拉函数(费马小定理)
一般取模运算: (a^n)%m。 我们可以改写为(a^n)%m= ((a%m)^n)%m, 即循环n次。 缺点:低效,循环了n次。int exp_mod(int a,int n,int m){ a = a%m; int temp = 1; while(n--) { temp = temp * a; temp = temp % m原创 2017-09-02 18:03:54 · 15085 阅读 · 2 评论 -
求任意整数n的阶乘
主要思想: 初始值为1. 然后把1放入数组存着,(按位存,比如999,即f[0]=9, f[1]=9, f[2]=9) 然后数组的每一位都乘以2,(注意还有进位) 然后数组的每一位都乘以3,… 然后数组的每一位都乘以n.最后从后往前,输出每一位即是结果。注意,数组后面从非0开始计算。即最高位就是第一个非0位。#include <iostream>#include <string.h>#原创 2017-09-21 10:37:46 · 5127 阅读 · 0 评论 -
C++STL中,map/multimap,set/multiset 和vector的排序
set存储已排序的无重复的元素,multiset是元素可以重复.为实现快速的集合运算set内部数据组织采用红黑树(一种严格意义上的平衡二叉树).map存储key-value对,按key排序,map的内部数据结构也是红黑树,并且key值无重复.multimap允许key值重复.在排序的时候,默认是按照key值从小到大排序,当key相等时,按pair< key,value>的原始顺序排序,即key相等时原创 2017-08-28 12:38:09 · 1577 阅读 · 0 评论 -
C++sort函数的用法
C++sort()函数的用法 近来看了c++标准库这本书,学到了很多,就把这其中的一点C++sort()函数的用法写下来和大家分享吧! (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!转载 2017-08-22 21:48:56 · 525 阅读 · 0 评论 -
优秀程序员不得不知道的20个位运算技巧
一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我觉得在一转载 2017-08-16 18:42:44 · 225 阅读 · 0 评论 -
长沙智慧眼算法工程师笔试题
1. C语言中,static的作用是什么? a.隐藏:当同时编译多个文件时,所有未加stitic前缀的全局变量和函数都具有全局可见性。用static修饰可以在不同文件中定义同名函数和同名变量,而不必担心命名冲突。 b.默认初始化为0:未初始化的全局变量和未初始化的静态变量是存储在BSS段(未初始化数据段) c.保持局部变量内容的持久:静态局部变量只进行一次初始化,且具有“记忆性”,但是,虽然它的原创 2017-08-08 15:26:09 · 519 阅读 · 0 评论 -
C++中参数传递的两种方式:传值与传址及它们的区别
#includeusing namespace std;void mySwap(int *p1,int *p2);int main(){ int a=12; int b=44; int *pa=&a; int *pb=&b; if(a<b){ mySwap1(a,b); //mySwap2(pa,pb); //mySwap3(pa,pb); //mySw转载 2017-08-09 19:53:55 · 1853 阅读 · 0 评论 -
C++ 初始化列表
何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。struct foo{ string name ; int id ; foo(s转载 2017-08-17 12:34:07 · 212 阅读 · 0 评论 -
详解c++中类的六个默认的成员函数
类的6个默认的成员函数包括:构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、取地址操作符重载、const修饰的取地址操作符重载。这篇文章重点解释前四个。(一)构造函数构造函数,顾名思义,为对象分配空间,进行初始化。它是一种特殊的成员函数,具有以下特点:1.函数名与类名相同。2.无返回值。3.构造对象的时候系统会自动调用构转载 2017-08-17 15:29:26 · 678 阅读 · 1 评论 -
C++中的C_str()函数用法
语法: const char *c_str(); c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。 注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样:转载 2017-08-17 21:35:31 · 5680 阅读 · 0 评论 -
关于函数strtok和strtok_r的使用要点和实现原理(一)
strtok函数的使用是一个老生常谈的问题了。该函数的作用很大,争议也很大。以下的表述可能与一些资料有区别或者说与你原来的认识有差异,因此,我尽量以实验为证。交代一下实验环境是必要的,winxp+vc6.0,一个极端平民化的实验环境。本文中使用的源代码大部分来自于网络,我稍加修改作为例证。当然,本人水平有限,有不妥之处在所难免,各位见谅的同时不妨多做实验,以实验为证。strtok的函数原型转载 2017-08-18 21:25:11 · 252 阅读 · 0 评论 -
关于函数strtok和strtok_r的使用要点和实现原理(二)
(一)中已经介绍了使用strtok函数的一些注意事项,本篇将介绍strtok的一个应用并引出strtok_r函数。 1.一个应用实例网络上一个比较经典的例子是将字符串切分,存入结构体中。如,现有结构体typedef struct person{ char name[25]; char sex[10]; char age[4];转载 2017-08-18 21:46:37 · 468 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2017-08-12 10:20:31 · 167 阅读 · 0 评论 -
C++中文件按行读取和逐词读取
#include <iostream>#include <fstream>#include <string>using namespace std;void OutPutAnEmptyLine()//输出空行{cout<< "\n" ;} //读取方式: 逐词读取, 词之间用空格区分void ReadDataFromFileWBW(){ cout<<"逐词读取,转载 2017-08-19 13:55:49 · 18184 阅读 · 2 评论 -
词频统计(一):C++使用Vector做词频统计
统计圣经中每个单词出现的次数。#include <iostream>#include <vector>#include <fstream>#include <string>#include <string.h>#include <sstream>#define lineMaxWord 200struct Record{ std::string word; int fre原创 2017-08-19 14:58:09 · 3937 阅读 · 0 评论 -
参数传递二维数组
今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图是想参数传递一个二维数组。于是就定义了一个二维数组,比如 int[1][1],然后调用函数。结果如何?当然是失败了,编译器提示:cannot convert parameter 1 from 'int [1][1]' to 'int **',参数类型不匹配。上述过程我自己也试了,当然不匹配,类型完全不一样嘛转载 2017-08-13 16:04:10 · 411 阅读 · 0 评论 -
将一个N*N的矩阵逆转90度
//将一个N*N的矩阵逆转90度#include <stdio.h>// 交换两个数void swap(int *p1, int *p2){ int temp; temp = *p1; *p1 = *p2; *p2 = temp;}//必须指明数组长度void Reverse90(int (&b)[2][2], int len){ int i,j;原创 2017-08-13 18:34:01 · 1501 阅读 · 0 评论 -
C++动态创建二维数组,memset()初始化二维数组
果然很麻烦,人生苦短,还是用python吧。#include <iostream>#include <string.h>int main(void){ int n,m; while(std::cin >>n >>m) { //动态创建二维数组 int **a = new int *[n]; for(int i=0; i<n;原创 2017-08-23 14:14:38 · 9644 阅读 · 0 评论 -
求整数n的二进制数 1的个数,0的个数
#include <iostream>// 这个只能求正整数的0的个数int ZeroN(int n){ int count = 0; while(n > 1) { if(0 == n%2) count++; n >>= 1; } return count;}// 可正可负,注意,负数是用补码存的原创 2017-09-21 11:06:52 · 1946 阅读 · 0 评论