我正在尝试为我的Vector / Matrix类编写自定义迭代器。迭代器的目的是迭代std :: vector并跳过每个第n个元素。我已经问了一个类似的问题c++ implementing iterators for custom matrix class,这确实提供了问题的解决方案。
然而,这种方法太慢了。我做了很多阅读:有效的C ++,C ++入门等和在线资源:http://www.drdobbs.com/stl-generic-programming-writing-your-ow/184401417或How to correctly implement custom iterators and const_iterators?,当然还有http://www.cplusplus.com/reference/iterator/iterator/。
最后一个特别提供了一个工作代码。但是,我无法弄清楚代码的作用以及如何为std :: vector实现它。这是代码:
template<class T>
class iter: public std::iterator<std::random_access_iterator_tag, T>{
private:
T* m_pter;
public:
iter(T* value): m_pter(value){}
iter(const iter& other_it): m_pter(other_it.m_pter){}
iter& operator++() { ++m_pter; return *this; }
bool operator!=(const iter& rhs) {return m_pter!=rhs.m_pter;}
T& operator*() { return *m_pter; }
};
和主要:
int main(int argc, char *argv[]){
int a[] = {1,2,3,4,5,6};
iter<int> from(a);
iter<int> to(a+5);
for (iter<int> iter = from; iter != to; ++iter) {
std::cout << *iter << std::endl;
}
// std::vector<int> a = {1,2,3,4,5,6};
// iter<std::vector<int> > from(a);
// iter<std::vector<int> > to(a+5);
// for (iter<std::vectorVECTOR<int> > iter=from; iter!=to; ++iter) {
// std::cout << *iter << std::endl;
// }
}
main函数的上半部分返回: $ ./main 1 2 3 4 5
和下半部分:
main.cpp:49:21: error: no matching function for call to ‘iter<int>::iter(std::vector<int>&)’
iter<int> from(a);
我真的很想理解为什么代码适用于数组但不适用于矢量。为了使它适用于载体,我需要改变什么?
非常感谢您的评论。
文森特
答案 0 :(得分:1)
实际上这很简单,this article帮助了。
int main {
std::vector<int> a = {1,2,3,4,5,6};
iter<int> from(&a[0]);
iter<int> to(&a[5]);
for (iter<int> iter = from; iter < to; ) {
std::cout << *iter << std::endl;
}
}
这对于进一步的规范来说已经足够了。