一:#ifndef foreach
#define foreach(container,it) \
for(typeof((container).begin()) it = (container).begin();it != (container).end() ;++it)
#endif
二:
#ifndef TM_BEGIN
#define TM_BEGIN(num) \
struct timeval tm_start##num;gettimeofday(&tm_start##num,NULL);
#endif
#ifndef TM_END
#define TM_END(NUM) \
struct timeval tm_end##num;gettimeofday(&tm_end##num,NULL);\
uint64_t cost_time##num = ((uint64_t)(tm_end##num.tv_sec - tm_start##num.tv_sec)*1000000 + tm_end##num.tv_usec=tm_start##num.tv_usec)
#endif
#ifndef GETCOST
#define GETCOST(num) cost_time##num
#endif
一个简单的示例:
int main()
{
TM_BEGIN(1)
map<int,int> m;
m.insert(make_pair(1,2));
m.insert(make_pair(2,2));
m.insert(make_pair(3,3));
m.insert(make_pair(4,4));
/* for(map<int,int>::iterator iter = m.begin();iter != m.end();++iter){
cout << iter->second << endl;
}
*/
foreach(m,it)
{
cout << it->second << endl;
}
int a = 0;
typeof(a) b = 9;
sleep(6);
TM_END(1);
cout << GETCOST(1) << endl;
}
补充两个删除指针用的
#define SAFE_DELETE_PTR(ptr) { \
if(NULL != ptr) \
delete ptr; \
ptr = NULL; \
};
#define SAFE_DELETE_ARRAY(ptr) { \
if(NULL != ptr) \
delete[] ptr; \
ptr = NULL; \
};
下面一个将拷贝构造和拷贝赋值私有并不实现
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
class Foo {
public:
Foo(int f);
~Foo();
private:
DISALLOW_COPY_AND_ASSIGN(Foo);
};