C++
文章平均质量分 55
小尼人00
人生一直在不断的探索中,才知道一些东西的真正含义,为了在探索的路途中少走弯路,早日达到心中的愿景,我认为没有什么比开阔眼界更重要的了。
展开
-
C++有哪几种情况只能用初始化列表,而不能用赋值?
C++有哪几种情况只能用初始化列表,而不能用赋值?(1)对于const和reference类型成员变量,它们只能够被初始化而不能做赋值操作,因此只能用初始化列表;初始化与赋值是不同的:赋值是删除原值,赋予新值,构造函数的意思是先开辟空间然后为其赋值,只能算是赋值,不算初始化;初始化列表就不一样了,开辟空间和初始化是同时完成的,直接给予一个值;常量不能被赋值,转载 2014-10-01 19:42:33 · 1060 阅读 · 0 评论 -
[C++] Stack / queue / priority_queue
Container adaptors:std::stack LIFO (class template )(constructor)Construct stack (public member function)emptyTest whether container is empty (public member function)sizeReturn siz原创 2013-01-23 21:50:39 · 560 阅读 · 0 评论 -
[C++] String类的复制控制的实现
#include #include using namespace std;class String { // 一切都是深拷贝!private : char *m_data;public : String(const char *str = NULL); String(const String&); String& operator =(const String& rhs);原创 2013-04-12 12:27:53 · 1127 阅读 · 0 评论 -
[C++] 分别设计只能在栈, 堆中分配内存的类!
#include using namespace std;class HeapOnly {public : HeapOnly() {} void destroy() const { delete this; }private : ~HeapOnly() {}};class HeapStack {private : static void* operator new原创 2013-04-12 10:30:04 · 1000 阅读 · 0 评论 -
句柄类的实现,robby 难道你还能忘记么?第几遍了已经!
为了避免每个使用指针的类自己去控制引用计数,可以用一个类把指针封装起来。这个类对象可以出现在用户类使用指针的任何地方。#include #include #include using namespace std;template class Handle {private : T *ptr; size_t *use; void decrUse() { --(*use);原创 2013-04-11 15:32:20 · 882 阅读 · 0 评论 -
C++经典书籍推荐(from stackoverflow)
C++和其它语言的不同之处在于,其它的语言通过网上的一些教程也许就可以掌握,而C++则基本不可能,必须得深入地研究大量经典的书籍。究其原因,在于C++的庞大和繁杂。因此市面上也难免会有一些书滥竽充数,抛开一些差的代码风格,这些书里面有很多的语言层面上的错误,而对于网络教程更是如此(事实上,也很难在网上找到一个全面的C++网络教程)。 下面主要是一些高质量的C++经典书籍,同时我们会标转载 2013-04-02 12:33:16 · 1452 阅读 · 0 评论 -
[C++] operator new与new operator 的区别 [百面]
C++中的operator new与new operator,看上去挺像的两姐妹,却有天壤之别。operator new(1) 只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间时,则 ->如果有new_handler,则调用new_handler,否则 ->如果没要求不抛出异常(以nothrow参数表达),则执行b转载 2013-03-12 17:09:17 · 808 阅读 · 0 评论 -
[C++] c++ new() 与new[]的区别
new和delete运算符用于动态分配和撤销内存的运算符new用法: 1. 开辟单变量地址空间 1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 2)int *a = new int(转载 2013-03-11 17:48:04 · 2135 阅读 · 0 评论 -
[面试] 写出 string 类的构造,析构,复制构造函数,复制操作符!
#include // 。。。#define BUG puts("here!!!");using namespace std;class String {private : char *m_data;public : String(const char *str = NULL); // 构造函数 String(const String &other); // 拷贝构造函数原创 2013-03-10 20:59:21 · 812 阅读 · 0 评论 -
[C++] SmartPtr / auto_ptr
http://www.cppblog.com/SmartPtr/archive/2007/07/05/27549.htmlauto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那转载 2013-03-11 11:19:58 · 1125 阅读 · 0 评论 -
[C++] 用C++实现“按任意键继续”
很久没有写过C++程序了,对Visual Studio有些不习惯。尤其对它编译后直接退出感到无语到愤怒。。。 http://blog.sina.com.cn/blogagn于是就谷歌访问了一下,发现有几下方法:1.直接调用系统函数 system("pause");例如:#includeusing namespace std;int main转载 2013-03-10 13:09:38 · 9912 阅读 · 0 评论 -
c++五种内存分配
在c++中,内存分为5个区域。分别是堆,栈,自由存储区,全局/静态存储区和常量存储区 栈 :由编译器在需要的时候分配,在不需要的时候自动清除的变量存储区。里面通常是局部变量,函数参数等。 堆 :由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。转载 2013-02-26 09:01:02 · 575 阅读 · 0 评论 -
[C++] inline函数_内联函数的一些总结【转载】
转自:http://blogold.chinaunix.net/u2/86301/showart_2411041.htmlinline函数我们看下面的函数,函数体中只有一行语句: double Average(double total, int number){ return total/number; } 定 义这么简单的函数有必要吗?实转载 2013-03-08 20:30:35 · 790 阅读 · 0 评论 -
[C++] 返回值为 const 类型的作用和什么时候用的注意!
返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数 按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何 的const或非const类型变量,完全不需要加上这个const关键字.但这只对于内部 类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左 值使用),对于用户自定义类型,返回值是常量是非常重要的,转载 2013-03-07 10:31:18 · 1774 阅读 · 0 评论 -
[C++] next_permutation的函数 与 copy() 函数的用法
全排列算法,然后发现C++的STL有一个函数可以方便地生成全排列,这就是next_permutation在C++ Reference中查看了一下next_permutation的函数声明:#include bool next_permutation( iterator start, iterator end );The next_permutation() func原创 2013-02-02 10:29:41 · 903 阅读 · 0 评论 -
[C++] STL容器设计原理
一、内存映像 容器在概念上是一种可以动态增大或减小的模型,所以其元素在实现上不可能直接保存在容器对象里,而应该保存在自由内存或堆上。这里要区分两个概念“容器对象”和“容器元素对象”。容器本身就是一个C++对象,其大小在运行时是不可以改变,因此容器应该有办法指示其每一个元素在内存中的位置,以便用户能通过容器对象找到其中的元素对象。二、存储方式和访问方式 向量和链表是两种最转载 2013-03-12 16:22:13 · 969 阅读 · 0 评论 -
C++浅拷贝和深拷贝的区别
c++默认的拷贝构造函数是浅拷贝浅拷贝就是对象的数据成员之间的简单赋值,如你设计了一个没有类而没有提供它的复制构造函数,当用该类的一个对象去给令一个对象赋值时所执行的过程就是浅拷贝,如:class A { public: A(int _data) : data(_data){} A(){}private: int data; };int main() { A a(5), b =转载 2014-10-01 17:32:34 · 655 阅读 · 0 评论 -
[C++] 单件模式的一般实现
#include #include #include #include #include using namespace std;class L {public : static L* instance() { if(!pi) { pi = new L(); } return pi; } virtual ~L() { if(pi) { delet原创 2013-04-09 12:19:43 · 965 阅读 · 0 评论 -
C++继承的例子 (1)
#include #include using std::cin;using std::cout;using std::endl;class A {private : int a;public : A() : a(100) { cout << "无参构造A" << endl; } A(int k) : a(k) {}};clas原创 2013-11-12 11:49:19 · 773 阅读 · 0 评论 -
C++ explicit关键字应用方法详解
C++编程语言中有很多比较重要的关键字在实际编程中起着非常重要的作用。我们今天为大家介绍的C++ explicit关键字就是其中一个应用比较频繁的关键字。下面就让我们一起来看看这方面的知识吧。C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的原创 2013-09-09 19:04:21 · 724 阅读 · 0 评论 -
C/C++函数调用的几种方式
我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,windows下栈的大小是2M(也有的说是1M),如果申请的空间超过栈的剩余空间时,将提示overflow。在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执转载 2013-06-10 15:48:30 · 2974 阅读 · 0 评论 -
C++ STL容器deque内部实现原理
双端队列(deque)是一种支持向两端高效地插入数据、支持随机访问的容器。其内部实现原理如下:双端队列的数据被表示为一个分段数组,容器中的元素分段存放在一个个大小固定的数组中,此外容器还需要维护一个存放这些数组首地址的索引数组,如下图所示。由于分段数组的大小是固定的,并且它们的首地址被连续存放在索引数组中,因此可以对其进行随机访问,但效率比vector低很多。转载 2013-05-01 19:21:19 · 1716 阅读 · 0 评论 -
从string类的实现看C++类的四大函数 [写的很好]
很久之前参加过一次面试,记得当时面试官问过我一个很基础的代码题:实现string类的四大基本函数!一个C++类一般至少有四大函数,即构造函数、拷贝构造函数、析构函数和赋值函数,一般系统都会默认。但是往往系统默认的并不是我们所期望的,为此我们就有必要自己创造他们。在创造之前必须了解他们的作用和意义,做到有的放矢才能写出有效的函数。 1 #include 2 3 class CSt转载 2013-05-01 19:23:50 · 884 阅读 · 0 评论 -
[C++ STL] 一个泛型算法的设计
从一个简单的需求开始,从一个vector中返回小于10的数的vector,那我们会写如下的函数:vector less_than_ten(vector& vec) { vector result; for(int i=0; i if (vec[i] result.push_back(vec[i]);转载 2013-03-12 16:26:49 · 850 阅读 · 0 评论 -
[C/C++] C语言文件读写示例程序 xcb
#include #include int main() { FILE *p, *q; char s[1000]; p=fopen("d:\\123.txt","r+"); q=fopen("d:\\1.txt","w+"); while(fscanf(p,"%s",s) != EOF) { printf("%s\n",s);原创 2013-02-02 10:36:47 · 1026 阅读 · 0 评论 -
[计算机] -32768~32767 计算机中的 -1 表示
10000000000000011111111111111111 计算机中的 -1 第一个是原码的话,表示的也是-1第二个是补码表示的-1,补码即原码除符号位外,全部取反再+11000000000000001取反后是1111111111111110,再+1即1111111111111111 C里面数是以补码方式来储存的整型的每一种都有无符号(unsigned)和有符号(signed原创 2013-01-25 20:23:21 · 1542 阅读 · 0 评论 -
[C++] vector 之 accumulate 用法示例
#include #include #include #include #include using namespace std;int main() { vector v; for(int i = 0; i < 10; i++) { v.push_back(i); } vector::iterator it = v.begin(); for(; it != v.end原创 2013-02-02 10:24:38 · 2463 阅读 · 0 评论 -
[C++] C++ Vector 的使用
标准库Vector类型使用需要的头文件:#include Vector:Vector 是一个类模板。不是一种数据类型。 Vector是一种数据类型。一、 定义和初始化Vector v1; //默认构造函数v1为空Vector v2(v1);//v2是v1的一个副本Vector v3(n,i);//v3包含n个值为i的元素Vector v4(n); //v4含有n个值转载 2013-01-24 23:19:47 · 719 阅读 · 0 评论 -
[C] sprintf 函数的用法 -> 各种类型的数据构造成字符串
将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致 sprintf 比 printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [,原创 2013-02-02 10:45:31 · 1103 阅读 · 0 评论 -
[C/C++] Effective C++ [ 读书笔记 ] 整理 1 - 12/55
有人说C++程序员可以分为两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers 成名之作的第三版的确当得起这样的评价。本书并没有你告诉什么是C++语言,怎样使用C++语言,而是从一个经验丰富的C++大师的角度告诉程序员:怎么样快速编写健壮的,高效的,稳定的,易于移植和易于重用的C++程序。本书共分为9节55个条款,从多个角度介绍了C++的使用经验和应转载 2013-02-20 23:53:41 · 869 阅读 · 0 评论 -
[C/C++] 第18章:特殊工具与技术《 C++ Primer 》
第18章:特殊工具与技术@学习摘录229:operator new函数和operator delete函数——0.使用new表达式时实际发生的三个步骤——1.首先,该表达式调用名为operator new的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象;——2.接下来,运行该类型的一个构造函数,用指定初始化式构造对象;——3.最后原创 2013-02-20 23:45:49 · 535 阅读 · 0 评论 -
[C/C++] C++ 类的学习
在 C++ 中用类来定义自己的 抽象数据类型 ( abstract data type )数据抽象能够隐藏对象的内部表示,同时仍然允许执行对象的公有 public 操作。1, 类作用域2, 构造函数3, this 指针与类有关的三个新特征 : 1), 类作用域 2), 可变成员 3), 静态成员。构造函数 : 。。。成员函数 : { 成员函数有一个附加的隐含实参,原创 2013-02-20 23:58:24 · 528 阅读 · 0 评论 -
《C++ Primer》 第07章 【函数。 06章语句(略)】
第二节:参数传递@ 学习摘录057:数组形参性质——1.不能复制数组——2.使用数组名字时,数组名会自动转化为指向其第一个元素的指针。@ 学习摘录058:数组形参在函数中声明方法void printValues(int *) { /*… */ }void printValues(int[]) { /* … */ }void printValues(int[10]) {原创 2013-01-19 14:26:19 · 455 阅读 · 0 评论 -
《C++ Primer》 第02章 [ 变量和基本类型 ]
第02章:变量和基本类型第三节:变量@ 学习摘录007:——C++是一门静态类型语言,在编译的时候会作类型检查.@ 学习摘录008:——左值:lvalue,左值可以出现在赋值语句的左边或右边。——右值:rvalue,右值只能出现在赋值的右边,不能出现在赋值语句的左边。——变量是左值,因此可以出现在赋值语句的左边,数字字面是右值,因此不能被赋值。摘录有想008:—原创 2013-01-19 11:40:41 · 440 阅读 · 0 评论 -
《C++ Primer》 第05章 【表达式】
第五节:自增和自减操作符@ 学习摘录050:自增和自减操作符——建议:只有在必要时才使用后置操作符。——前置操作需要做的工作更少,只需加1后返回加1后的结果即可。——而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。——对于int型对象和指针,编译器可优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能花费更大的代价。——养成使用前原创 2013-01-19 12:12:44 · 447 阅读 · 0 评论 -
《C++ Primer》 第08章 标准 IO 库 | Good !
第08章:标准IO库——C++的输入/输出(input/output)由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写(IO)。第一节:面向对象的标准库@ 学习摘录062:iostream定义读写控制窗口的类型——istream 从流中读取——ostream 写到流中去——iostream 对流进行读写;从istream和ostream派生而来@ 学原创 2013-01-19 15:01:13 · 493 阅读 · 0 评论 -
《C++ Primer》 第01章 【入门】
第01章:快速入门第二节:介绍输入与输出@ 学习摘录001:——endl称为操纵符(manipulator),可刷新与设备相关联的缓冲区。——在刷新缓冲区时,用户可立即看到写入到流中的输出。——程序员经常在调试过程中插入输出语句,这些语句都应刷新输出流。摘录有想001:——这几句让我想起之前自己以及朋友们出现过的错误,当if(!cin)时,只是cin.clear()是不原创 2013-01-19 11:23:08 · 464 阅读 · 0 评论 -
《C++ Primer》 第04章 [ 数组和指针 ]
第04章:数组和指针第二节:指针的引入@ 学习摘录041:——指针的概念很简单,指针用于指向对象。@ 学习摘录042:如果必须分开定义指针和其所指针的对象,则将指针初始化为0,因为编译器可检测出0值的指针,程序可判断该指针并未指向一个对象。摘录有想042:——我想这也就是说,定义指针最好有初始化,避免不必要的错误。@ 学习摘录043:——NULL 在 头文件中原创 2013-01-19 12:06:36 · 461 阅读 · 0 评论 -
《C++ Primer》 第03章 [ 标准库类型 ]
第03章:标准库类型 C++还定义了一个内容丰富的抽象数据类型标准库,如 : string 大小可变的字符串 vector 大小可变的集合 bitset 提供了抽象方法操作位集合第一节:命名空间using声明@ 学习摘录024:——一旦使用了using声明,我们就可以直接引用名字,而不需要再引用原创 2013-01-19 11:57:50 · 488 阅读 · 0 评论 -
[面试] static的含义以及其在C/C++中的区别
static关键字是C, C++中都存在的关键字. 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同,本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种 auto,转载 2013-02-04 10:21:36 · 1737 阅读 · 0 评论