با unordered_set نوشتم توش رنج رو هم گذاشتم بهتر از این هم میشه جنریک بنویسید که نوع داده را هم کاربر خودش مشخص کنه
class UniqueNumberGenerator {
public:
UniqueNumberGenerator(int range, int buffer_size) :
range_(range),
buffer_size_(buffer_size) {
srand(time(NULL));
fillSet();
}
std::vector<int> getNumbers(int count) {
std::vector<int> result;
result.reserve(count);
int _count = count;
if (_count > buffer_size_)
_count = buffer_size_;
auto end = buffer_.begin();
std::advance(end, _count);
for (auto it = buffer_.begin(); it != end; it++) {
result.push_back(*it);
}
buffer_.erase(buffer_.begin(), end);
fillSet();
return result;
}
private:
std::unordered_set<int> buffer_;
int range_;
int buffer_size_;
void fillSet() {
while (buffer_.size() < buffer_size_) {
int value = rand() % range_;
buffer_.insert(value);
}
}
};