友元函数并不是这个类的成员函数,它可以是一个常规函数,也可以是另一个类的成员函数。如果想通过这种函数存取类的私有成员和保护成员,则必须在类的声明中给出函数的原型,并在该函数前加上friend...
[code="c++"]//test.h template class A{ public: A(); void fun(); }; //test.cpp #include"test.h" template A::A(){} template void A::fun(){} main.cppint main()...
升级到10.10后老出现这个问题,网上有一些解决办法,但不少链接失效了,下不了补丁,后来我发现当我把firefox关掉后,没几秒就可以动了,不关无论等多久都不行。于是我准备换chrome用一段时间,虽然firefox稍微慢了一点点,网银支持的不太好,我也很喜欢google,但是用了这么久,也习惯了。不舍啊!!!换了也一样失灵,频率稍低一点......
在数据结构里最简单的是线性表,第一表项是表头,最后一项是表尾,线性表是一个有限序列linearList.h[code="c++"]#ifndef LINEARLIST_H#define LINEARLIST_Htemplateclass LinearList{public: virtual int Size()const=0;//表的分配的size(max...
单链表(线性链表):它用指针表示结点间的逻辑关系。一个存储结点包含data(数据域),link(指针域,链域)。它的特点是长度可以很方便的进行扩充。数据元素的顺序与其链表表示中结点的物理顺序可能不一致,一般通过指针将各数据元素按逻辑顺序链接起来由于链接表的每个结点要带指针域,所以存储空间比顺序存储要付出较大的代价。LinkedList.h[code="c++"]#ifndef LI...
刚把c++编程思想上的题做完了,感觉书是没怎么看懂,题基本做出来了,然后数据结构刚好相反,以前也学过,书貌似“看明白了”,题才第二章,花的时间比预算的多了不少,而且数量挺大的,计划又赶不上变化啦...但无论如何,我会把它们做完的 :wink: ...
双向链表(double linked list)目的是为了解决在链表中访问直接前驱和直接后继的问题。一个直接前驱一个直接后继,向前后搜索的开销都是O(1)[code="c++"]#ifndef DOUBLELINKEDLIST_H#define DOUBLELINKEDLIST_H#include"linearList.h"#includetemplateclass...
[code="c++"]#include#include#includeusing namespace std;using namespace boost::assign;class B{public: virtual void f(){cout
文件类型: 宏1.普通文件(regular file) S_ISREG()2.目录文件(directory file) S_ISDIR()//这种文件类型提供对设备带缓冲的访问,每次访问长度可变3.字符特殊文件(character ...
[code="c++"]#include#include#include#include#include#includeusing namespace std;using namespace boost::assign;template void print(const T& t){ typename T::const_iterator i...
[code="c++"]#include#include#include#includeusing namespace std;templatevoid print(const T& t){ typename T::const_iterator iter; for(iter=t.begin();iter!=t.end();++iter){ ...
[code="c++"]#include#include#include#include#include#includeusing namespace std;templatevoid print(const T& t){ typename T::const_iterator iter; for(iter=t.begin();iter!=...
[code="c++"]#include#include#include#includeusing namespace std;int main(){ int a[] = {10,20,30}; string s[]={"abc","def","hjk","dsaf"}; const size_t SIZE = sizeof a / siz...
[code="c++"]#include//using namespace std;inline int max1(int i1,int i2){ return ::max(i1,i2);}templateconst T& max(const T& t1,const T& t2){ return t1>t2?t1:t2;}int ma...
静态方法是在程序装载到内存时就放入内存了,静态的虽不需要实例化,但一直占用内存,所以访问速度较快,所以静态类不能太大太占资源。而对象的方法是在调用时才进入内存的,非静态类只有被实例化后才占内存,需要“调入”内存后才能执行。相对较慢。...
一直以来,面向对象的语言都喜欢把变量设置成为私有的,然后提供公有的getter,setter,防止类的用户直接使用数据的内部表示来编写代码,因此使用存取函数来操作数据,以维持类的抽象性,增强安全性.除了这个原因还有一个就是当你在调试的时候需要跟某一变量时,只需要在gettter,setter里面打上断点就行了.工作中一些老的代码,很多变量都是public的,他们用的时候爽了,后面的人改bug的...
myPrint.h[code="c++"]#ifndef MYPRINT_H#define MYPRINT_H#include"iostream"using namespace std;templatevoid print(const T& t){ typename T::const_iterator iter; for(iter=t.beg...
模板可以具有值模板参数,而不仅仅是类型模板参数对于非类型模板参数,你不能使用浮点,class类型的对象和内部链接对象(string...)作为实参
[code="c++"]templatevoid f(){ T t = T();//如果T是内建类型,x是0或者false}templateclass A{ T t;public: A():t(){//确认t已被初始化,内建类型对象也是如此 }};[/code]...
vector插入开销很大,只有确切知道需要多少个对象时候,vector才是最优的选择deque(double-ended-queue)双端队列:分配新的存储空间速度更快,方便在前后端加进新元素list是一个双向链表:随机移动元素代价很高,在任何一个地方插入很方便,但随机访问比较慢,最合适的是从头到尾遍历,但其遍历速度仍相对较慢...
[code="c++"]#include#include#includeusing namespace std;//multisetint main(){ srand(time(0)); multiset ms;//允许每次插入每个值的多个对象 for(int i=0;i
模板参数:位于模板声明或定义内部,关键字template后面所列举的名称模板实参:用来替换模板参数的各个对象。和模板参数不同的是,模板实参可以有多种类型和值。[code="c++"]template//T和N就是模板参数class ArrayInClass{ public: T array[N];};ArrayInClass//double,...
对于非引用类型的参数,在实参演绎的过程中,会出现数组到指针(array-to-pointer)的类型转换(这种转型通常也被称为decay(退化))[code="c++"]#include#includeusing namespace std;/* 比较两个字符串的地址,而不是它们的字典顺序,这也是我们趋向使用如std::string的字符串类, 而不使用C风格字...
[code="c++"]#include#includeusing namespace std;int main(){ srand(time(0)); int a[10]; for(int i=0;i
对于那些在基类中声明,并且依赖于模板参数的符号(函数或者变量等),应该在它们前面使用this->或者Base::[code="c++"]#includethisusing namespace std;templateclass A{public: void f(){ cout ,除非B中也有一个f(),那么调用的就是B::f() ...
[code="c++"]
#ifndef RATIONAL_H
#define RATIONAL_H
#include
class Rational{
public:
int mNum;
int mDen;
public:
Rational(int numerator = 0,int denominator = 1);
Rational oper...
shared_ptr早期叫做counted_ptr,它实现了引用计数型的智能指针,与scoped_ptr一样包装了new操作符在堆上分配的动态对象,但可以被自由地拷贝和赋值。同时它弥补了auto_ptr因为转移语义而不能把指针作为STL容器元素的缺陷。
share_ptr是强引用,像铁丝绑住堆上的对象,只要有一个指向x对象的shared_ptr存在,该x对象就不会析构,它是原子操作,没有用锁...