加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 用于STL Iterables的迭代器循环的宏

发布时间:2020-12-16 04:51:42 所属栏目:百科 来源:网络整理
导读:概念 所以,我正在尝试定义一个宏来简化以下代码: for (vectorTYPE::iterator iter = iterable.begin(); iter != iterable.end(); iter++) 和 for (mapTYPE,TYPE::iterator iter = iterable.begin(); iter != iterable.end(); iter++) 等等 现有工作 到目前
概念

所以,我正在尝试定义一个宏来简化以下代码:

for (vector<TYPE>::iterator iter = iterable.begin(); 
             iter != iterable.end(); iter++)

for (map<TYPE,TYPE>::iterator iter = iterable.begin();
             iter != iterable.end(); iter++)

等等

现有工作

到目前为止,我已经有了

#define every(iter,iterable) ::iterator iter = iterable.begin(); iter != iterable.end(); iter++
for (vector<TYPE> every(iter,iterable))

但我想进一步简化这一点.

目标

理想情况下,我希望能够做到

for (every(iter,iterable))

这意味着我需要以某种方式获得类< TYPE>可迭代对象的.这可能吗?如果是这样,我该怎么办?

规定

>理想情况下,这需要进入已设置为访问迭代器对象的(相对)大型代码库.
>我正在使用C 11之前的编译器运行

胜利

#define every(iter,iterable) typeof(iterable.begin()) iter = iterable.begin(); iter != iterable.end(); iter++
for (every(iter,iterable))

解决方法

这个答案不依赖于C 11,但它需要typeof,而某些编译器可能没有.应该适用于任何最近的g
#define For(iter,iterable) for(typeof((iterable).begin()) iter = (iterable).begin(); iter != (iterable).end(); ++iter)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读