是否存在仅包含第一个值和最后一个值的c++容器?

Does it exist a c++ container with just the first and the last value?

本文关键字:c++ 容器 最后一个 包含 第一个 是否 存在      更新时间:2023-10-16

我需要一个容器,它只初始化一个范围的第一个值和最后一个值。

我需要一个像下面这样的容器:

range<int> myRange(first, last, bound);
int occur=myRange.count(r%5==0 && r%10!=0);

bound将定义容器内迭代过程中对象之间的距离。例如,如果first=0, last=10bound=1将对firstlast的每个整数进行迭代。如果是bound=2,迭代将在{0,2,4,6,8,10}内执行。但是大小是2;myRange[0]=firstmyRange[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函数的实现中使用定义硬编码条件。如果您希望计数函数足够泛型,以便计算任何泛型表达式,那么我想我需要在代码中使用正则表达式。在我继续实现之前,我想确认一下这是否真的是您想要的。