C++ 实现Range类,用于常规遍历
PYTHON的Range类非常好用,所以用C++来简单实现下:
// 实现Range类,用于遍历
// #include <string> class Range {
public: // for(auto i:Range(1,10);
// 这个拆开就是这样:
// Range::RangeIterator it
// while( it != it.end() ) {
// i = *it
// it++
// }
//
// so,迭代器只需要支持操作符 * ++ != 即可
// class RangeIterator {
public:
explicit RangeIterator( long _var, long _step )
: var( _var ), step( _step ) {
}
RangeIterator& operator++() {
var += step;
return *this;
}
long operator*() {
return var;
}
bool operator!=( const RangeIterator& other ) {
// 递减时自身大于对比值
if( step < )
return (this->var > other.var);
return (this->var < other.var);
}
private:
long var, step;
}; //
// Range类只需要提供 beigin() end() 成员函数(返回迭代器)
//
explicit Range( long _begin, long _end, long _step = )
: begin_var( _begin ), end_var( _end ), step( _step ) {
}
RangeIterator begin() {
return RangeIterator( begin_var, step );
}
RangeIterator end() {
return RangeIterator( end_var, step );
} private:
long begin_var, end_var, step;
};
之后测试下:
int main()
{
for( auto i : Range( , ) ) {
printf( "%d ", i );
} printf( "\n" );
for( auto i : Range( , , ) ) {
printf( "%d ", i );
} printf( "\n" );
for( auto i : Range( , , - ) ) {
printf( "%d ", i );
} printf( "\n" );
std::string str = "what the fuck?";
for( auto i : Range( , str.size() ) ) {
printf( "%c ", str[i] );
} return ;
}

C++ 实现Range类,用于常规遍历的更多相关文章
- C++11的for循环,以及范围Range类的实现
C++11支持range-based for循环.这是一个很方便的特性,能省挺多代码.以下代码就能很方便的遍历vector中的元素,并打印出来: 1 2 3 4 5 6 7 8 std::vector ...
- System.ConfigurationManager类用于对配置文件的读取
http://blog.csdn.net/ligenyingsr/article/details/54095986 System.ConfigurationManager类用于对配置文件的读取.其具有 ...
- javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数
javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数 1.常规函数 javascript常规函数包括以下9个 ...
- 框架中spring有专门的类用于处理乱码
在三大框架spring中有专门的一个过滤器类用于处理乱码问题--->CharacterEncodingFilter 我们只需在web.xml中添加如下几行代码就可解决乱码问题 <filte ...
- net 提供了Thread类用于线程的操作
net 提供了Thread类用于线程的操作. 当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程.后台线程将会随着主线程的推出而退出.后台线程不妨碍程序的 ...
- JSONArray ja = JSONArray.fromObject(list);//特殊类 用于将list转化为JSON 数据并返回 out.print(ja);
JSONArray ja = JSONArray.fromObject(list);//特殊类 用于将list转化为JSON 数据并返回out.print(ja);
- 【TODO】Ruby Range类
创建: 2017/10/28 Range类 ...
- 探索未知种族之osg类生物---渲染遍历之认识SceneView
前言 我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构, a 场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息: b ...
- List集合去重的一些方法(常规遍历、Set去重、java8 stream去重、重写equals和hashCode方法)
1. 常规元素去重 碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素. // 遍历后判断赋给另一个list集合,保持原来顺 ...
随机推荐
- PPP 转义字符 编码 和 解码
#include <stdio.h> #include <string.h> // PPP数据帧每一帧都以标识字符0x7E开始和结束: // 由于标识字符的值是0x7E,因此当 ...
- 用MFC如何对子对话框进行初始化
通常情况下,我们在创建子对话框的类时.cpp文件中并不会自动生成initdialog函数,但我们的很多操作都需要用到initdialog初始化函数,如果你直接在类的头文件中去定义一个初始化函数,然后在 ...
- 解决href标签跳转到WEB-INF下的jsp页面的办法
用的配置struts的action的方法. jsp页面这样写的. class里面的路径是下面的struts配置文件的路径 struts配置文件里这样写的. name里面的内容要和href里面的内用一致 ...
- 自己瞎捣腾的Win7下Linux安装之路-----理论篇
接着上回说道,我把双系统做好啦,开心.... 之后我就在想几个问题: 1.在Ubuntu装好后,重启电脑却还是win7,等我用EasyBCD之后,才可选择使用装好的Ubuntu呢? 2.在用EasyB ...
- php操作Memcache
一.memcache基本的介绍 是一个高性能的分布式内存对象缓存系统. 和mysql比较,进行理解memcache (1)该软件是一个c/s架构, (2)mysql的数据是存储到哪里的?是存储到磁盘里 ...
- Android延时执行调用的几种方法
一.开启新线程 new Thread(new Runnable(){ public void run(){ Thread.sleep(XXXX); ...
- [THINKING IN JAVA]操作符
3 操作符 3.1 static import 可以static import静态方法和变量,这样就可以在不写类名的前提下调用类中的静态方法和变量: package com.chenlei.study ...
- Python线程通信
subprocess 作用 模块用于生产新的进程,连接到其输入.输出.错误管道,并获取其返回值 1. 如何使用subprocess模块 启动子进程的推荐方法是使用以下方便功能. 对于更高级的用例,当这 ...
- rhel 5.8 and 6.4 yum配置
rhel 5.8 and 6.4 yum配置 6.4 [Packages]name=Packagesenabled=1gpgcheck=0baseurl=file:///iso 5.8 [Packag ...
- redis 3.2.6 on ubuntu 14.04
1. official site: https://github.com/antirez/redis/releases 2. compile and setup tar zxf redis-3.2.6 ...