是否存在仅包含第一个值和最后一个值的c++容器?
Does it exist a c++ container with just the first and the last value?
我需要一个容器,它只初始化一个范围的第一个值和最后一个值。
我需要一个像下面这样的容器:
range<int> myRange(first, last, bound);
int occur=myRange.count(r%5==0 && r%10!=0);
bound
将定义容器内迭代过程中对象之间的距离。例如,如果first=0
, last=10
和bound=1
将对first
到last
的每个整数进行迭代。如果是bound=2
,迭代将在{0,2,4,6,8,10}内执行。但是大小是2;myRange[0]=first
和myRange[1]=last
。
允许在不存在的对象上迭代的容器。迭代第一个,第一个+边界,第一个+2*边界,第一个+n*边界,直到到达最后一个元素。我不想用数组
count()
方法将返回给定条件下return true
范围内的对象个数。
注意:我是一个初学者,所以如果有一个解决方案,请详细说明一个最小值:)谢谢你抽出时间;)
参见以下实现:
猫range.h
#ifndef _RANGE_H_
#define _RANGE_H_
#include <climits>
#include <cassert>
#define expr(var) (var%5 == 0 && var%10 != 0)
class Range {
int first;
int last;
int bound;
friend class RangeIterator;
public:
Range(int f, int l, int b) : first(f), last(l), bound(b) {}
~Range() {}
int count() const {
int cnt = 0;
for (int i = first; i <= last; i += bound) {
if (expr(i))
cnt++;
}
return cnt;
}
int getFirst() const { return first; }
int getLast() const { return last; }
};
class RangeIterator {
const Range* mRange;
int mCurrVal;
public:
RangeIterator(const Range* range) : mRange(range)
{
assert(range);
mCurrVal = mRange->first;
}
~RangeIterator() {}
int getNext() {
int ret = INT_MIN;
if (mCurrVal <= mRange->last) {
ret = mCurrVal;
mCurrVal += mRange->bound;
}
return ret;
}
};
#endif
猫main.cxx
#include <iostream>
#include <climits>
#include "range.h"
using namespace std;
int main() {
Range r(0, 50, 5);
RangeIterator ri(&r);
int curr = INT_MIN;
while ((curr = ri.getNext()) != INT_MIN) {
cout << curr << 't';
}
cout << endl;
cout << "count is : " << r.count() << endl;
return 0;
}
我在count函数的实现中使用定义硬编码条件。如果您希望计数函数足够泛型,以便计算任何泛型表达式,那么我想我需要在代码中使用正则表达式。在我继续实现之前,我想确认一下这是否真的是您想要的。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 用于访问容器<T>数据成员的正确 API
- Eigen如何在容器循环中干净地附加矩阵
- 模板专用化(按容器):value_type
- 关联容器的下界复杂性:成员函数与非成员函数
- 更多constexpr容器是否需要mark_immutable_if_consexpr
- 在STL容器中使用模板类
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 如何将带有自定义对象的容器从C++传递到QML
- 在没有未定义行为的情况下实现类似std::vector的容器
- 将 BASE 派生类存储在同一容器中
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 在C++中迭代 2D 容器的最干净方法
- 将线程中的数据存储到全局容器的最佳方法?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用带有C++对象和标准库容器的插件系统
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- 我可以用字符串变量而不是它的名字创建容器吗? C++