摘要:
很容易想到的实现方式是将类的构造函数设为私有的。 即 class A{private: A(){};};则类A不能被继承(继承后不能实例化对象,那继承后的类还有什么意义?)。上面的实现方式使得类A也不能实例化一个对象,即A a;不能通过编译。那么怎么让一个类除了不能实例化对象外,其他操作都一样呢?先来看下面的例子,class A{friend class B;private: A(){};};cl... 阅读全文
摘要:
红黑树是一种特殊的平衡二叉搜索树,为什么set、map的实现要采用红黑树? 为什么不用heap? set 、map都要求自动排序,heap也能实现自动排序啊,为什么不用heap? 我认为最重要的原因:STL中heap是基于vector实现的,而vector是连续线性空间,这不符合set的集合性质! 为什么不用二叉搜索树? 可能不平衡,造成搜索深度过大! 为什么不用平衡二叉搜索树(AVL树)? ... 阅读全文
摘要:
仿函数是什么 仿函数又称函数对象,其本质是类的对象,但为什么带“函数”二字呢,因为该类重载了()运算符,使得对象使用()时类似使用函数。 如: greater<int> ig; //比较大小。greater<int>是一个模板类,ig是该类的对象,这里称ig为仿函数或函数对象。cout << ig(5, 2) << endl; //之所以称呼ig时带“函数”二字,是因为ig使用()操作符时类似... 阅读全文
摘要:
一、迭代器用来干嘛的? 本质是指针,用来遍历访问容器中元素的。 STL实现了容器和算法的分离,如何实现的呢,答曰用类模板和函数模板,也可理解为所谓的泛化。那么容器和算法又是怎样结合在一起的呢,答曰迭代器——使用算法时,传给算法的是迭代器! 二、迭代器常用运算。 所有标准库容器的迭代器都提供*iter iter->mem ++iter --iter iter1 == iter2 iter1 != ... 阅读全文
摘要:
一、关联式容器有哪些,如何实现的。 标准的STL中关联容器有set map multiset multimap,这四种容器都是基于红黑树实现的。 使用这些容器需要包含#include <set> #include <map> SGI STL还提供了标准之外的以基于hash table实现的的hash_set hash_map hash_multiset hash_multimap. 使用这些容... 阅读全文
摘要:
float f = -8.25; int *pi = (int*)&f; printf("%d\n", *pi);输出-1056702464,为什么呢? 阅读全文
摘要:
多线程MultiThreading.c #include #include #include #include #define MAX 10 pthread_t thread[2];//线程ID pthread_mutex_t mut;//定义互斥锁变量 int number=0, i; v... 阅读全文
摘要:
1、因为进程有自己独立的内存地址空间,而线程共享进程的内存地址空间。 2、另一个看进程和线程的角度是进程模型基于两类不同的概念:资源的组织和执行。 进程是用于组织资源的单位,进程将相关的资源组织在一起,这些资源包括:内存地址空间,程序,数据等,将这些以进程的形式组织起来可以使得操作系统管理这些资源更为容易。 而线程,是每一个进程中执行的一个条线。线程虽然共享进程中的大多数资源,但线程也需要... 阅读全文