vc
文章平均质量分 66
Kathryn_
这个作者很懒,什么都没留下…
展开
-
break与continue的用法区别
一般说来,程序进入循环体后在下次循环判断之前执行循环体里的所有语句,break和continue语句可以终止循环或忽略某些循环。break: 此语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即,不是跳到下一个循环周期而是退出循环。如果break语句包含在嵌套循环里,它只跳出最里面的循环。[cpp] view plaincopy转载 2014-11-16 17:13:48 · 706 阅读 · 0 评论 -
在c++中如何阻止类被继承
这个话题是源自于一个面试题,我在网上查了一下有不少这方面的解说!我自己整理了一下,选择了一个自认为是最优方案!我们从最简单的开始:首先,大家都知道要阻止类被实例化,可以通过使用private or protected 关键字来声明默认构造函数。那么在阻止类被继承的时候,我们需要用到这个技巧。其次,阻止类被继承还需要使用private来控制继承的基类。namespace Sample转载 2014-11-22 17:33:30 · 3393 阅读 · 0 评论 -
钻石继承与虚继承
首先,何为钻石继承,顾名思义,在类的继承过程中,继承结构是一个类似菱形(钻石)的结构就属于钻石继承,如下: 这是一个最简单的钻石继承。实际上,在复杂的继承表中,只要子类按不同的继承路径回溯到基类有菱形结构,均属钻石继承。下面先看一个例子,钻石继承在C++程序设计中带来的问题。转载 2014-11-22 15:35:13 · 628 阅读 · 0 评论 -
构造函数定义为private,protected
将构造函数,析构函数声明为私有和保护的,那么对象如何创建?已经不能从外部调用构造函数了,但是对象必须被构造,应该如何解决,麻烦大家帮忙说明,关于构造,析构函数声明为私有和保护时的用法??? 提出这个问题,说明你已经对c++有所思考了。从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数,子类的“转载 2014-11-22 20:37:50 · 606 阅读 · 0 评论 -
静态变量与全局变量的区别
int a;main(){while(1){ static b=1; a=2; b++; a++;}}我们所理解的静态变量b,只知道它在上面的函数内部只初始化一次,其实是个假像 ,我要表达的是,事实上b初始化的值,不是在循环体完成的.继续下看.while(1){ st转载 2014-11-07 22:08:13 · 1429 阅读 · 1 评论 -
同步和异步、阻塞和非阻塞
同步和异步、阻塞和非阻塞首先说明我对这些概念也不是很清楚,以下内容是我做的一些理事。同步和异步、阻塞和非阻塞这是两组概念,说的是不同的事情,同步和阻塞没有必然的联系,异步和非阻塞也没有必然的联系。同步和异步是只跟IO操作过程中进程的状态变化有关。阻塞和非阻塞就是进程的两种状态。比如你去银行,排除的话就是一种同步的方式,叫号的话就是异步的方式。排队必须自己看着什么时候轮到自己,而叫号转载 2015-01-23 22:26:29 · 648 阅读 · 0 评论 -
STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。转载 2015-04-05 13:42:32 · 684 阅读 · 0 评论 -
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
C语言中讲讲static变量和static函数有什么作用static关键字有两种意思,你看上下文来判断1,表示变量是静态存储变量 表示变量存放在静态存储区. 2,表示该变量是内部连接 (这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static) ,也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).当static加在函数前面的时候转载 2015-04-05 21:26:37 · 629 阅读 · 0 评论 -
C++:STL标准入门汇总
学无止境!!!第一部分:(参考百度百科) 一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段转载 2015-04-05 10:54:45 · 513 阅读 · 0 评论 -
联合体(共同体)union V{...}v;
void test (){ union V { struct X { unsigned char s1:2; // :2 指 占两个字符? 是两个bit。若是int 占多少? unsigned char s2:3; u转载 2015-04-06 21:32:10 · 733 阅读 · 0 评论 -
Malloc与new的区别(二)
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强转载 2015-04-06 21:53:37 · 572 阅读 · 0 评论 -
线程与进程的联系,线程的优缺点。
进程概念 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。 在Mac、Windows NT等采用微内核结构的操作系统中,进程的功转载 2014-11-20 22:53:38 · 637 阅读 · 0 评论 -
C++的参数传递机制
C++的参数传递机制 C++一共有三种传递方式:值传递(pass by value)、指针传递(pass by pointer)、引用传递(pass by reference)。关键点:在函数中,编译器总是要为函数的每个参数制作临时副本。引用传递除外。一.值传递。值传递很简单。唯一要注意的就是当值传递的输入参数是用户自定义类型时,最好用引用传递代替,并加上const关键字。转载 2014-11-20 22:05:12 · 2119 阅读 · 0 评论 -
break、continue和return在编程中的作用
1、return 语句的作用 (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行 (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致,可以使用强制类型转换来是数据类型一致 (3) return 当方法说明中用void声明返回类型为空时,应使用这种格式,不返回任何值。转载 2014-11-16 17:07:00 · 1906 阅读 · 0 评论 -
网络编程学习笔记一:Socket编程
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型转载 2014-10-29 22:37:18 · 626 阅读 · 0 评论 -
二进制、八进制、十六进制之间的关系
一、从十进制到二进制 如果有人问: 10+10=? 您可能会不加思索地回答:“等于20。”这样的回答对不对呢?可以说对,也可以说不对,这要进行具体的分析。说对,是因为我们平时都是用十进制,也即用逢十进一的方法来进行计算的。但如果从下面即将介绍的二进制,即逢二进一的观点来看,那么,上述回答则是错的。 我们的祖先,很早以前就创造了十进制,并将它作转载 2014-10-29 22:01:38 · 7413 阅读 · 0 评论 -
用c语言编程 统计输入的一个字符串中每个字母出现的次数
#include #include int main(){char a[100];int result[26];for (int i=0;i{result[i]=0;}scanf("%s",a);int len=strlen(a);for (int j=0;j{result[a[j]-'a']+原创 2014-10-29 22:05:49 · 32460 阅读 · 8 评论 -
C++ string中find() ,rfind() 函数
string a="abacvvabccd";int n=a.find("ab");int m=a.rfind("ab");原创 2014-11-17 20:59:31 · 3027 阅读 · 0 评论 -
求字符串中连续出现次数最多的子串
#include#include #include #include using namespace std;pair fun(const string &str){vector substrs;int maxcout=1,count =1;string substr;int i,len = str.length();for(i =0;i转载 2014-11-17 19:18:45 · 747 阅读 · 0 评论 -
输入一行字符串,找出其中重复出现且最长的字符串,输出它及其首字符的位置
1、问题 输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它。 2、解析 例如“yyabcdabjcabceg”,输出应该为abc和3。 可以将字符串yyabcdabjcabceg分解成如下子串 yyabcdabjcabceg yabcdabjcabceg转载 2014-11-17 21:21:54 · 5373 阅读 · 0 评论 -
sizeof
在腾讯的面试中,问了个关于C++中空类的大小和虚表指针(vptr)的问题。以下内容来自:http://hi.baidu.com/gengshenspirit/blog/item/55c4f2ca7f23c041f31fe743.html 初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知转载 2014-11-18 19:04:32 · 610 阅读 · 0 评论 -
为什么使用多线程?
1.耗时的操作使用线程,提高应用程序响应2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。3.多CPU系统中,使用线程提高CPU利用率4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 使用多线程的理由之一是和进程相比,它是一种非常花销小转载 2014-11-20 20:47:21 · 635 阅读 · 0 评论 -
统计在从1到n的正整数中1出现的次数
问题:给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。例如:N= 2,写下1,2。这样只出现了1个“1”。N= 12,我们会写下1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12。这样,1的个数是5。问题一:写一个函数f(N),返回1到N之间出现1的个数,比如f(12)= 5。解法一转载 2014-11-20 19:49:39 · 906 阅读 · 0 评论 -
new和malloc的区别(一)
1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.转载 2015-04-06 21:50:52 · 532 阅读 · 0 评论 -
C++的重写,重载,重定义
1. 重写 (override): 父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。1) 被重写的函数不能是 static 的。必须是 virtual 的,或者是 override 的 ( 即函数在最原始的基类中被声明为 virtual , c++ 中没有 override) 。2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型转载 2015-04-14 21:07:34 · 787 阅读 · 0 评论 -
string类的构造函数,析构函数,拷贝构造函数和赋值构造函数
//MyString.h#include cstddef>//定义宏NUL的头文件#include QObject>#include iostream>//#include cstdio>#include string.h>using namespace std;class String{public:转载 2015-04-13 22:05:47 · 1072 阅读 · 0 评论 -
c++返回字符串
#include#include using namespace std; string fun1(int a){ string str = "a"; return str;} char* fun2(int a){ char *p = new ch转载 2015-05-17 10:00:23 · 1992 阅读 · 0 评论 -
解决VS2005 VS2008 vs2010断点无效-源代码与原始版本不同
方法1、直接把整个文件格式化了一次,断点就可以用了Ctrl + A全选菜单:编辑-〉高级-〉设置选定内容的格式 (Ctrl+K, Ctrl+F)通过比较文件发现是由于制表符Tab(0x09)引起的,原因不详。方法2:整个工程重新生成。方法3:利用批清理和批生成来重新通过源代码生成DLL,以便源代码和DLL是对应的。1、右键点击解决方案,选中“批生成”转载 2015-05-22 16:42:34 · 773 阅读 · 0 评论 -
c++容器map中根据key求得对应value值
value=map[key]原创 2015-05-19 10:23:14 · 4258 阅读 · 1 评论 -
函数返回什么类型好:指针还是对象
这个问题 困扰了 我很长时间,现在征求解答 :下面是模拟代码 代码1: C/C++ codeFileElement* FolderElement::GetSingleFile(LPCTSTR fileName) const { ...... FileElement *pFile = new FileElement(....); .........转载 2015-07-10 11:57:04 · 1329 阅读 · 0 评论 -
gethostname()函数出错:WSAGetLastError 10093 解决方法
今日在Windows下用VC直接调用gethostname()来拿主机名时发现出错,WSAGetLastError 10093,在网上查了一下,找到了原因,是因为Winsock未初始化或初始化失败,解决办法:未初始化需要先初始化WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);在程序最后调用WSACleanup();释放资源转载 2015-07-27 09:23:32 · 3240 阅读 · 1 评论 -
char*,const char*和string的相互转换
1. string转const char* string s = "abc"; const char* c_s = s.c_str();2. const char*转string 直接赋值即可 const char* c_s = "abc"; string s(c_s);3. string转char* stri转载 2015-07-15 10:33:44 · 618 阅读 · 0 评论 -
应用程序无法正常启动0xc0150002 解决方案
我也遇到过此问题,解决办法:方案一: 在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件。方案二:不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默认情况下,其文原创 2015-07-28 10:00:43 · 4731 阅读 · 0 评论 -
VS2013 编译程序时报无法加载PDB文件错误解决方案
vs2012运行c++出现:无法查找或打开 PDB 文件。“ConsoleApplication1.exe”(Win32): 已加载“C:\Users\hp\Documents\Visual Studio 2012\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe”。已加载符号。“ConsoleAppl转载 2015-07-28 09:54:27 · 3824 阅读 · 0 评论 -
RegQueryValueEx函数不能获取到键值?
使用这个函数,返回值是0,但是获取到的键值只是字符串的第一个字母。这是为什么?谢谢。急求答案。int _tmain(int argc, _TCHAR* argv[]){ const int MAX_BUFFER_LEN = 80; char szBuffer[MAX_BUFFER_LEN]; DWORD dwNameLen; dwNameLen = MAX_BUFFER_LEN原创 2015-07-28 14:49:51 · 3314 阅读 · 0 评论 -
C++如何生成自己的静态库(lib)文件
打开VS2005,建立一个win32控制台程序,然后打开项目--LibTest属性(如图1),打开LibTest属性页(如图2),在右边配置类型处选择静态库(lib)。然后我们就可以写我们的头文件和cpp源文件了。写完后编译下就可以在目录下找到相应的lib文件了。 在这里我首先写一个比较简单的库文件,头文件内容是:#ifndef MYLIB_H#define MYL转载 2015-07-31 08:53:38 · 11172 阅读 · 0 评论 -
libcurl的源码,编译为静态链接库出现的问题
libcurl的源码,编译为静态链接库出现的问题如下图所示:解决方案:具体步骤就是:1、给工程添加依赖的库:项目->属性->链接器->输入->附加依赖项,把libcurl.lib ws2_32.lib winmm.lib wldap32.lib添加进去注意,debug配置用libcurld.lib2、加入预编译选项:项目->属性->c/c++原创 2015-05-08 13:39:57 · 1503 阅读 · 0 评论 -
snprintf vs _snprintf 和平台差异
#include #include #include #define snprintf _snprintf int main() { char desc[8]; int ret, i; //为了查看是否有自动补\0情况,我们将desc设置非\0值。 memset(desc, 'a', sizeof(desc)); ret = sizeof(d转载 2015-05-16 21:56:49 · 1170 阅读 · 1 评论 -
链表操作 (C语言)插入,合并,销毁,删除,冒泡排序
#include#include#includetypedef struct Node{ int data; struct Node *next;}node;//把node 声明为struct Node.node *add(node *head,int data);node *ListDelete(node *head,int i);转载 2015-04-16 09:14:47 · 900 阅读 · 0 评论 -
C++算法之 合并两个有序链表
题目:合并两个已经排序好的链表方法1:两个链表 比如链表1: 1->3->5->7->9 链表2: 2->4->6->8->10 跟我们合并两个数组一样,链表1的头结点 和链表2的头节点比较,如果链表1头节点的值大于链表2头接点的值, 那么链表2的头结点为合并链表的头结点,那么链表1的头节点继续和链表2的第二个节点(剩余链表2的头结点)转载 2015-04-15 10:17:03 · 1480 阅读 · 0 评论