如何在不使用循环的情况下生成未知数量的项目列表

How to generate a list of unknown number of items without using a loop

如果我不知道列表中有多少项,是否可以在不使用循环的情况下生成项目列表?

这是一个例子(使用循环):

vector<int> bits(int N) {
    vector<int> v;

    while (N != 0) {
        v.push_back(N & 1);
        N >>= 1;
    }

    return v;
}

在这个例子中,我事先不知道返回的向量会有多少项。虽然使用循环来实现此功能完全没问题,但我的问题(因为我正在尝试学习 C++ 和 STL)是是否有一种方法可以做同样的事情但没有任何循环。

如果您绝对坚持不遗余力地让 STL 为您 运行 循环,那么也许是这样的:

class BitIterator {
 public:
  using value_type = int;
  using difference_type = std::size_t;
  using pointer = int*;
  using reference = int&;
  using iterator_category = std::input_iterator_tag;

  BitIterator(int n = 0) : n_(n) {}

  int operator*() const { return n_ & 1; }
  BitIterator& operator++() { n_ >>= 1; return *this; }

  bool operator==(const BitIterator& other) const { return n_ == other.n_; }
  bool operator!=(const BitIterator& other) const { return n_ != other.n_; }

 private:
  int n_ = 0;
};

std::vector<int> bits(int N) {
    return {BitIterator(N), BitIterator(0)};
}

Demo