摘要:
转自:http://www.cnblogs.com/zhujudah/admin/EditPosts.aspx?opt=11.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).#incldue #define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x))int main(void){ int y = 阅读全文
摘要:
在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性。事实上,很难找到一种不支持 Sockets API 的现代语言。该 API 相当简单,但新的开发人员仍然会遇到一些常见的隐患。本文识别那些隐患并向您显示如何避开它们。隐患 1.忽略返回状态第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头变得困难。捕获并检查每一个返回状态,而不是忽略它们。考虑清单 1 显示的例子,一个套接字send函数。清单 1. 忽略 API 函数返回 阅读全文
摘要:
源码下载地址:http://diducoder.com/sotry-about-sqrt.html好吧,我承认我标题党了,不过既然你来了,就认真看下去吧,保证你有收获。我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢?虽然有可能你平时没有想过这个问题,不过正所谓是“临阵磨枪,不快也光”,你“眉头一皱,计上心来”,这个不是太简单了嘛,用二分的方法,在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的中间数;如果小了,就再拿右区间的中间数来试。 阅读全文
摘要:
?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513 阅读全文
摘要:
vector 这个我们最熟悉了,也可能是我们用的最多的容器之一了。 我们可以用vector来模拟栈,vector的push_back和pop_back效率很高,时间复杂度是常数。 由于他是一个连续的内存区域,所以他能够随机访问容器中的人一个元素且时间复杂度也是常数。 但是vector是一个不能够自动“减肥”的容器。比如一开始你在push_back很多元素后,然后再某一个时间点释放点这些元素,虽然vector的size为0,但是vector的capacity却始终很大,这一点和浪费空间。在一些对时间和空间要求比较高的情况下,vector的push_back和pop_back以及它的随机访问... 阅读全文
摘要:
boost.circular_buffer简介很多时候,我们需要在内存中记录最近一段时间的数据,如操作记录等。由于这部分数据记录在内存中,因此并不能无限递增,一般有容量限制,超过后就将最开始的数据移除掉。在stl中并没有这样的数据结构,一般需要我们自己构造,常用方法如下:用list构造,超过后把数据头移除用vector构造,超过后把数据头移除用数组构造,通过循环的方式覆盖这几种方式都有各自的缺点:用list构造无法实现随机访问,用vector构造移动数据头开销较大,用数组构造需要维护数据头指针和防止计数器溢出,计算位置和数据的移除也相对较麻烦。当然,这些都不是无法解决的问题,就是稍微麻烦点。不 阅读全文
摘要:
#include 02.#include 03.#include 04.05.typedef std::list list_any;06.07.//关键部分:可以存放任意类型的对象08.void fill_list(list_any& la)09.{10. la.push_back(10);//存放常数11. la.push_back( std::string("dyunze") );//存放字符串对象;注意la.push_back(“dyunze”)错误,因为会被当错字符串数组12.}13.14.//根据类型进行显示15.void show_list(list_a 阅读全文
摘要:
boost 的 operators 提供了comparison operators、arithmetic operators、operators for iterators 操作。虽然使用 C++ 的标准容器和算法时只需要提供 operator(const T&,const T&);bool operator=(const T&,const T&);当从 from boost::less_than_comparable 派生时,派生类必须提供如下的等价函数 bool operator() const;R operator*() const;// 用户必须实现该操 阅读全文
摘要:
Disjoint SetsDisjoint Sets的意思是一堆集合們,它們相互之間都沒有交集。沒有交集是指:各個集合之間沒有擁有共同、相同的元素。中文稱作「分離集」。Disjoint Sets的性質相當特殊。資訊學家仔細觀察其特性後,精心設計出一套優雅美觀的資料結構,可以快速的做集合運算。Union、Find、Split由於每個Disjoint Sets指的就是集合們都沒有交集,我們就不用考慮交集、差集等等的運算,因為結果很明顯。所以只需要考慮union、find、split這三個集合運算:union就是將兩個集合做聯集,合併成一個集合。find就是找找看一個元素是在哪個集合裡面。split 阅读全文
摘要:
优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大互小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“#include #include using namespace std;int main() { priority_queue q; // insert three elements into the priority queue q.push(66.6); q.push(22.2); q.push(44... 阅读全文