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集合,保持原来顺 ...
随机推荐
- 16 On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima 1609.04836v1
Nitish Shirish Keskar, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, Ping Tak Peter Tang N ...
- 合理利用gradle的占位符功能
1.gradle中可以声明字符串或者其他变量,然后再buildType中使用buildConfigField 来往BuildConfig文件中插入一个字符类型的常量,如下 先声明 def umengD ...
- Sep19_html/css_imooc学习笔记_1
1. <h1></h1>标题,h1-h6从大到小 2. <p></p> 段落 3. <img src=“1.jpg”> 加入图片 4.基本结 ...
- oracle 锁表查询与解锁
查询锁住的表 SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,s.terminal, ...
- Linux运维人员如何学习python编程
Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...
- lua判断表中数据是否连续,0可以代表任何数
最近看到有lua面试题,挺有意思的,一张表中有若干个数,0可以代表任何数 比如有张表{9, 2, 4, 1, 3, 0, 0, 0, 0},按照规则这张表中的四个0可以用来代表5,6,7,8,那么这张 ...
- 简谈ashx
是一般处理程序, 是asp.net web 组件的一种,ashx是其扩展名. 实现IHttpHandler接口,接收并处理http请求.这个接口有一个IsReusable成员,一个待实现的方法Proc ...
- AndroidStudio Rename Package
AndroidStudio中重命名包名的方法和可能遇到的问题 在开发中,可能会遇到需要重命名和合并某个包的情况.如果进行如下操作可能会导致以下结果: 在一个空包下创建一个包,会出现两个包名合并的情况. ...
- [UI]抽屉菜单DrawerLayout分析(一)
本文转载于:http://www.cnblogs.com/avenwu/archive/2014/04/16/3669367.html 侧拉菜单作为常见的导航交互控件,最开始在没有没有android官 ...
- tomcat集群
apache整合tomcat部署集群 http://www.cnblogs.com/God-froest/p/apache_tomcat.html 今天看到"基于apache的tomcat负 ...