I am implementing custom paginator. E.g.
vector<int> v{1,2,3,4};
for (auto page : Paginator(begin(v), end(v), 2)) {
// For the first iteration i expect {1, 2}, and for the second {3, 4}
}
I have error in my code:
/home/alex/dev/main.cpp:32:28: error: could not convert ‘((Paginator<__gnu_cxx::__normal_iterator > >)this)->Paginator<__gnu_cxx::__normal_iterator > >::data_.std::vector<_Tp, _Alloc>::begin >, std::allocator<__gnu_cxx::__normal_iterator > > >, std::allocator >, std::allocator<__gnu_cxx::__normal_iterator > > > > >()’ from ‘std::vector >, std::allocator<__gnu_cxx::__normal_iterator > > >, std::allocator >, std::allocator<__gnu_cxx::__normal_iterator > > > > >::iterator {aka __gnu_cxx::__normal_iterator >, std::allocator<__gnu_cxx::__normal_iterator > > >, std::vector >, std::allocator<__gnu_cxx::__normal_iterator > > >, std::allocator >, std::allocator<__gnu_cxx::__normal_iterator > > > > > >}’ to ‘__gnu_cxx::__normal_iterator >’ return data_.begin();
My code
template<class IterT>
class Paginator {
public:
Paginator(IterT begin, IterT end, size_t sz) {
pageSize_ = sz;
const size_t dist = distance(begin, end);
parts_ = dist / pageSize_;
if (dist % pageSize_ != 0) {
++parts_;
}
for (int i = 1; i <= parts_; ++i) {
IterT start = next(begin, (i - 1) * pageSize_);
IterT finish = next(begin, i * pageSize_);
data_.push_back({start, finish});
}
}
size_t size() const {
return parts_;
}
IterT begin() {
return data_.begin();
}
IterT end() {
return data_.end();
}
private:
size_t pageSize_;
size_t parts_;
vector<vector<IterT>> data_;
};
template<class T>
void Print(const vector<T>& v) {
for (auto i : v) {
cout << i << ' ';
}
cout << endl;
}
int main() {
vector<int> v{1,2,3,4,5,6,7,8,9};
for (auto i : Paginator<vector<int>::iterator>(begin(v), end(v), 2)) {
Print(i);
}
}
Aucun commentaire:
Enregistrer un commentaire