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集合,保持原来顺 ...
随机推荐
- Log4j的简要概述
读取配置文件的三种使用方式: 1.Java代码:BasicConfigurator.configure() 2.Java特性:键值对解析(properties文件) PropertyConfigura ...
- 优先队列 :Priority Queue
PriorityQueue是从JDK1.5开始提供的新的数据结构接口,它是一种基于优先级堆的极大优先级队列.优先级队列是不同于先进先出队列的另一种队列. 每次从队列中取出的是具有最高优先权的元素.如果 ...
- Zookeeper概论(对zookeeper的概论、原理、架构等的理解)
Zookeeper概论(对zookeeper的概论.原理.架构等的理解) 一.概论 Zookeeper是一个分布式的.开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是h ...
- Java框架重量级,轻量级的问题?
一般认为,SSH为重量级.SSI为轻量级. 但轻重的概念怎么界定?
- 备忘DES带向量的加密和解密与DES简单加密与解密
package com.ego.util; import java.security.Key; import java.security.SecureRandom; import java.secur ...
- Search for a Range
Given a sorted array of integers, find the starting and ending position of a given target value. You ...
- DP(Dynamic programming)——尽力学习之中(2016 HUAS ACM 暑假集训-5)
这周不打算按照以往的方式更新博客,而是采用整体的方式.一是因为学的太少,没东西写:二是这篇博客会经常更新的.如题,DP——尽力学习之中. ------------------------------- ...
- SpringMVC——返回JSON数据&&文件上传下载
--------------------------------------------返回JSON数据------------------------------------------------ ...
- 关于AJAX中status中12030与12031的错误
最近使用ajax调用一般处理程序时,出现外网调用不成功,内网调用成功,错误码为12030或12301的情况.当时在网上搜索了一些资料,有的说是因为文件中取了个中文名称导致的,有的是说要配置什么IIS之 ...
- SynchronousQueue类
介绍 Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样.不像Ar ...