🛰️航天仿真算法库 SpaceAST
0.0.1
载入中...
搜索中...
未找到
DoubleRange.hpp
浏览该文件的文档.
1
20
21
#pragma once
22
23
#include "AstGlobal.h"
24
#include <iterator>
// for std::input_iterator_tag
25
#include <cstddef>
// for size_t / ptrdiff_t
26
27
AST_NAMESPACE_BEGIN
28
29
40
class
DoubleRange
41
{
42
public
:
48
DoubleRange
(
double
start,
double
stop,
double
step,
size_t
n)
49
: start_(start), stop_(stop), step_(step), n_(n) {}
50
51
class
iterator
52
{
53
public
:
54
using
iterator_category = std::input_iterator_tag;
55
using
value_type = double;
56
using
difference_type = ptrdiff_t;
57
using
pointer =
const
double
*;
58
using
reference = double;
// input iterator:按值返回
59
60
iterator
() =
default
;
61
iterator
(
const
DoubleRange
* range,
size_t
idx)
62
: range_(range), idx_(idx) {}
63
65
reference
operator*
()
const
66
{
67
return
(idx_ == range_->n_ - 1)
68
? range_->stop_
69
: range_->start_ + range_->step_ * idx_;
70
}
71
72
iterator
& operator++() { ++idx_;
return
*
this
; }
73
iterator operator++(
int
) {
auto
tmp = *
this
; ++*
this
;
return
tmp; }
74
75
bool
operator==(
const
iterator& other)
const
{
return
idx_ == other.idx_; }
76
bool
operator!=(
const
iterator& other)
const
{
return
!(*
this
== other); }
77
78
private
:
79
const
DoubleRange* range_ =
nullptr
;
80
size_t
idx_ = 0;
81
};
82
83
iterator begin()
const
{
return
iterator(
this
, 0); }
84
iterator end()
const
{
return
iterator(
this
, n_); }
85
size_t
size()
const
{
return
n_; }
86
87
private
:
88
double
start_;
89
double
stop_;
90
double
step_;
91
size_t
n_;
92
};
93
94
98
AST_NAMESPACE_END
ast::DoubleRange::iterator
定义
DoubleRange.hpp:52
ast::DoubleRange::iterator::operator*
reference operator*() const
解引用:除末点按 step 步进,末点返回 stop_
定义
DoubleRange.hpp:65
ast::DoubleRange
按步长采样的相对秒范围(惰性可迭代)
定义
DoubleRange.hpp:41
ast::DoubleRange::DoubleRange
DoubleRange(double start, double stop, double step, size_t n)
构造相对秒采样范围
定义
DoubleRange.hpp:48
src
AstCore
Time
DoubleRange.hpp
制作者
1.12.0