🛰️航天仿真算法库 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
27AST_NAMESPACE_BEGIN
28
29
41{
42public:
48 DoubleRange(double start, double stop, double step, size_t n)
49 : start_(start), stop_(stop), step_(step), n_(n) {}
50
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
87private:
88 double start_;
89 double stop_;
90 double step_;
91 size_t n_;
92};
93
94
98AST_NAMESPACE_END
定义 DoubleRange.hpp:52
reference operator*() const
解引用:除末点按 step 步进,末点返回 stop_
定义 DoubleRange.hpp:65
按步长采样的相对秒范围(惰性可迭代)
定义 DoubleRange.hpp:41
DoubleRange(double start, double stop, double step, size_t n)
构造相对秒采样范围
定义 DoubleRange.hpp:48