
C/C++
文章平均质量分 62
luckystar_sai
机会总是垂青有准备的人
展开
-
工作中遇到的C中Sscanf 函数的用法详解
1 首先,看到sscanf时,会想到scanf,唯一不同的是前者是以固定的字符串为输入源;后者是以屏幕为输入源。2 sscanf函数的定义为 int sscanf(const char *str,const char * format,.......);函数说明,将参数str的字符串根据format字符串来格式化数据,转化后的结果存在于对应得函数参数内。 返回值为参数数目,返回0表示失败。...原创 2020-01-18 21:32:34 · 1208 阅读 · 0 评论 -
c++中stringstream 类的用法及字符串与数字之间转化
iostream标准库支持对于内存的输入输出,只要将流与存储在程序内存中的string对象捆绑在一起,就可以使用通用的输入输出操作符来读写string对象!标准库中定义了三种类型的字符串流:istringstream,由istream派生出来的,用于读一个string的对象;ostringstream,由ostream派生出来的,用于写一个string的对象;stringstream,原创 2017-08-23 18:45:37 · 7184 阅读 · 0 评论 -
对于多进程,子进程继承了父进程的内容
子进程继承父进程用户号UIDs和用户组号GIDs环境Environment堆栈共享内存打开文件的描述符执行时关闭(Close-on-exec)标志信号(Signal)控制设定进程组号当前工作目录根目录文件方式创建屏蔽字资源限制控制终端子进程独有进程号PID不同的父进程号自己的文件描述符和目录流的拷贝子进程不继承父进程的进程正文(text),数据和其他锁定内存(memor原创 2017-08-28 11:37:13 · 8432 阅读 · 0 评论 -
C++ 中sort函数的用法
使用此函数只需用#include sort即可使用,语法描述为:sort(begin,end),表示一个范围,例如:int _tmain(int argc, _TCHAR* argv[]){ int a[20]={2,4,1,23,5,76,0,43,24,65},i; for(i=0;i cout sort(a,a+20); for(i=0;i c原创 2017-08-22 10:36:39 · 1610 阅读 · 0 评论 -
查找一个有序数组中某一数值出现的次数
#include#include#include#include#includeusing namespace std;int Gfindf(vectordata, int k){ if (data.empty())return -1; int len = data.size(); int begin = 0; int end = len - 1; //int mid =原创 2017-08-29 15:57:54 · 1595 阅读 · 0 评论 -
sscanf和sprintf函数的用法
sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大的两个函数。头文件 stdio.h原型[cpp] view plain copyint sscanf( const char *buffer, const char *format, ...转载 2017-08-30 15:02:55 · 822 阅读 · 0 评论 -
try-catch-throw
1、try-catch语句可以和throw语句不在一个函数中;2、一个try语句后面可以跟若干个catch语句,但是一个函数不可以只有try语句,而没有catch语句;原创 2017-09-17 19:28:29 · 367 阅读 · 0 评论 -
C++中多线程面试经典问题
1、基本概念 详见:线程和进程关系和区别、同步和互斥、进程间通信2、以下多线程对int型变量x的操作,哪几个不需要进行同步(D) A. x=y; B. x++; C. ++x; D. x=1; 详见:多线程二 多线程中的隐蔽问题揭秘3、多线程中栈与堆是公有的还是私有的 (C)转载 2017-09-17 21:01:34 · 6841 阅读 · 0 评论 -
重载、重写、隐藏
派生类是否继承基类的虚函数?ebjhg11级分类:C/C++语言被浏览179次2013.06.16定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数. 如果派生类没有重定义某个虚函数,则使用基类中定义的版本. ---- 4th edtion中文版 那么派生类到底继不继承基类中的虚函数,或者用转载 2017-09-26 09:45:10 · 213 阅读 · 0 评论 -
字母二十六进制与十进制数之间的转化
字母表示十进制数:a 1b2aa 27ab 28huawei 104680767输入参数是字符串,字母必须是小写,输入的字母最小是1位,最大是6位,输入十进制数不超过32位整数的最大值,判断字符串的有效性,如果无效,输出“”ERROR”输出描述:输入是十进制数,输出是对应的字母表示的数;输入是字母,输出是十进制数。void convert(const char *原创 2017-08-31 17:06:20 · 6643 阅读 · 0 评论 -
C++中虚函数工作原理和(虚)继承类的内存占用大小计算
C++中虚函数工作原理和(虚)继承类的内存占用大小计算标签: 工作c++class编译器fun2012-08-19 17:30 52608人阅读 评论(49) 收藏 举报 分类:面试珠玑(84) 版权声明:本文为博主原创文章,未经博主允许不得转载。转载请标明出处,原文地址:http://blog.youkuaiyun.com/hackbute转载 2017-09-27 22:37:53 · 241 阅读 · 0 评论 -
宏定义、内联函数、普通函数的区别
一、宏定义和内联函数的区别1. 宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率。 内联函数本质上是一个函数,内联函数一般用于函数体的代码比较简单的函数,不能包含复杂的控制语句,while、switch,并且内联函数本身不能直接调用自身。如果内联函数的函数体过大,编译器会自动的把这个内联函数变成普通函数。转载 2017-10-07 21:26:24 · 594 阅读 · 0 评论 -
C/C++ 中的 volatile 关键字
1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler th转载 2017-09-15 09:23:29 · 310 阅读 · 0 评论 -
static 的作用
1、限制函数、变量的作用域(隐藏)的作用。未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。如果加了static,就会对其它源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏.2、static的第二个作用是保持变量内容的持久。(static变量中原创 2017-10-07 22:09:33 · 448 阅读 · 0 评论 -
const的作用
1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;(4)对于类的成员函数,若指定其为const类原创 2017-10-07 22:18:50 · 233 阅读 · 0 评论 -
c++中assert函数的用途
(1)assert函数定义在 assert.h函数中,作用用来检查条件的合法性,如果不成立,则则终止程序执行,原型定义:#include assert.h>voidassert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行原创 2017-10-06 10:02:48 · 1784 阅读 · 0 评论 -
二维数组与指针、指针数组、数组指针的用法
二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组下面我们讨论指针和二维数组元素的...原创 2018-03-12 18:16:20 · 56761 阅读 · 41 评论 -
“指向字符串常量的字符指针不可更改字符串的内容” 敲黑板,划重点了!!!
一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)...原创 2019-03-30 22:05:30 · 1541 阅读 · 3 评论 -
algorithm 中advance函数
函数原型:template void advance (InputIterator& i, Distance n);第一个参数为迭代器的引用,第二个参数是偏移位置,n = 0 不移动,n > 0 迭代器+n, n 作用:加减迭代器,即使是map这种非随机访问的容器也能使用。同样也适用于list/vector/deque/stack等容器中。使用起来比较方便#include #in原创 2017-08-23 18:15:47 · 2236 阅读 · 0 评论 -
fork函数的解析
1.fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid),这是众为周知的。2.还有一个很重要的东西是,在fork()的调用处,整个父进程空间会原模原样地复制到子进程中,包括指令,变量值,程序调用栈,环境变量,缓冲区,等等。#include #includ原创 2017-08-23 09:56:10 · 334 阅读 · 0 评论 -
把一个数组排序为最小的值
#include#include#include#include#includeusing namespace std;static bool cmp(int a, int b)//这里的 cmp函数sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。 因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局原创 2017-09-04 17:27:53 · 222 阅读 · 0 评论 -
静态变量/非静态变量的区别
C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直转载 2017-07-17 09:26:42 · 701 阅读 · 0 评论 -
C++中拷贝构造函数、浅拷贝与深拷贝的详解
拷贝构造函数调用时机:1、对象需要通过另外一个对象进行初始化: T t1(10, 20);T t2(0, 0);T t3 = t1; // 拷贝构造函数调用的时机一:T t4(t2); // 拷贝构造函数调用的时机 二:2、实参传递给形参时调用赋值构造函数 拷贝构造函数调用的时机三:原创 2017-07-17 11:23:22 · 949 阅读 · 0 评论 -
结构体中访问成员点操作符和箭头操作符的区别
相同点:两个都是二元操作符,其右操作符是成员的名称。 不同点:点操作符左边的操作数是一个“结果为结构”的表达式; 箭头操作符左边的操作数是一个指向结构的指针。 举例说明:#include Song_t song1,song2, //两个Song_t类型的对原创 2017-07-21 17:06:06 · 1198 阅读 · 0 评论 -
C++ 中基类及派生类中继承成员访问权限
#include iostream> #include string> using namespace std; class CBase { string name; int age; public: string ge翻译 2017-07-23 10:57:22 · 1294 阅读 · 0 评论 -
list vector set map multimap multiset 容器大揭秘
1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问 4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时原创 2017-07-24 09:10:28 · 315 阅读 · 0 评论 -
c++ 重载操作符
/******************************赋值(=)、下标(【】)、调用(())、成员访问->必须使用成员函数******//****************************输入输出流必须使用全局函数法(友元函数)实现重载**********************//*****************************复合赋值符、自增、自减、解引用、算数原创 2017-07-25 10:50:21 · 417 阅读 · 0 评论 -
指针与引用的区别
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。1.指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;原创 2017-08-17 21:56:35 · 171 阅读 · 0 评论 -
VA_START()和VA_END()函数的应用
原理解释:VA_LIST 是在C语言中解决变参问题的一组宏,在头文件下。VA_LIST的用法: (1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针 (2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。 (3)然后用VA_AR转载 2017-08-18 15:27:48 · 1799 阅读 · 0 评论 -
堆和栈的区别
1.1内存分配方面:堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。1.2申请方式方面:堆:需要程序员自己申请,并指明大小。转载 2017-08-13 22:55:27 · 176 阅读 · 0 评论 -
c++中箭头和点的区别
箭头的左边必须是指针,而点的左边必须是实体,或者类对象.struct CandyBar{float weight;int calorie;};在程序中CandyBar snack={2.3,350};我们就可以用snack.weight来取得结构中的值。这时是不能使用"->"来调用的,"->"符号指针对指针来说的。如下情况可以使用"->"Cand原创 2017-08-21 15:30:59 · 7328 阅读 · 0 评论 -
c++中find函数解析
++总述: 以下所讲的所有的string查找函数,都有唯一的返回类型,那就是size_type,即一个无符号整数(按打印出来的算)。若查找成功,返回按查找规则找到的第一个字符或子串的位置;若查找失败,返回npos,即-1(打印出来为4294967295)。1.fine()原型://string (1)size_type find (const ba转载 2017-08-24 18:18:17 · 2348 阅读 · 0 评论 -
指针函数与函数指针的区别
1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。表示:fl转载 2017-08-15 11:22:05 · 192 阅读 · 0 评论 -
指针数组和数组指针
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组 表示:数组a中的元素都为int型指针原创 2017-08-15 11:23:07 · 156 阅读 · 0 评论 -
STL中list容器中sort函数用法
首先,声明一下,由于list基础结构是链表,不能直接用下标【】来直接取某一元素。1、当list 中类型是int或者string类型时,直接调用sort函数,即void ListSortTest1(){list num;num.push_back("10_8");num.push_back("10_3");num.push_back("10_2");num.push_原创 2017-08-22 15:17:12 · 3555 阅读 · 1 评论 -
STL中list 总结
"font-size:18px;">#pragma warning(disable:4786) #include #include #include using namespace std; class Student{ private: int ID; string Name; public: Studen转载 2017-08-22 16:13:30 · 223 阅读 · 0 评论 -
c++ 中getline 用法
getline(istream &in, string &s)从输入流读入一行到string s•功能:–从输入流中读入字符,存到string变量–直到出现以下情况为止:•读入了文件结束标志•读到一个新行•达到字符串的最大长度–如果getline没有读入字符,将返回false,可用于判断文件是否结束#inclu原创 2017-08-25 17:03:03 · 3148 阅读 · 0 评论 -
atoi函数和itoa函数用法
表头文件: #include 定义函数: int atoi(const char *nptr);函数说明: atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0‘)才结束转换,并将结果返回。返回值: 返回转换后的整型数。#include #include main()原创 2017-09-04 14:32:39 · 1750 阅读 · 0 评论 -
a++ 和++a做左值得区别
a++和++a在做左值的时候有不同,那么左值它首先必须是有特定地址的才能作为左值,否则赋值就没有具体对象。再看看a++和++a。a++的意思是先复制一份临时数据出来参与周边环境的运算,再自加变量a,可见a++用来参与运算的是一份复制出来的临时数据,这个数据是临时存在而没有固定地址的,不是一个真正的变量。++a的意思是先自加变量a,再将变量放到周边环境参与运算,那么++a用来参与运算的是有具体地址的原创 2017-07-20 10:30:19 · 403 阅读 · 0 评论