很经典的一些宏的用法

一:#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);
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值