如果我不知道串列中有多少項,是否可以在不使用回圈的情況下生成專案串列?
這是一個示例(使用回圈):
vector<int> bits(int N) {
vector<int> v;
while (N != 0) {
v.push_back(N & 1);
N >>= 1;
}
return v;
}
在這個例子中,我不知道回傳的向量事先會有多少項。雖然使用回圈來實作這個功能完全沒問題,但我的問題(因為我正在嘗試學習 C 和 STL)是是否有辦法做同樣的事情但沒有任何回圈。
uj5u.com熱心網友回復:
如果您絕對堅持要讓 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)};
}
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419349.html
標籤:
