首先,我们需要了解C++中的迭代器是一种可以遍历容器内元素的对象。在这个问题中,我们需要实现一个迭代器,使其能够从第二个(或第n个)项开始循环遍历。
以下是一个简单的实现:
#include<iostream>
#include<vector>
template<typename T>
class CircularIterator {
public:
CircularIterator(const std::vector<T>& data, size_t start_index)
: data_(data), index_(start_index) {}
CircularIterator& operator++() {
index_ = (index_ + 1) % data_.size();
return *this;
}
T& operator*() {
return data_[index_];
}
private:
const std::vector<T>& data_;
size_t index_;
};
int main() {
std::vector<int> data = {1, 2, 3, 4, 5};
CircularIterator<int> iter(data, 1); // 从第二个项开始循环
for (int i = 0; i < 10; ++i) {
std::cout << *iter << " ";
++iter;
}
return 0;
}
在这个例子中,我们定义了一个名为CircularIterator
的模板类,它接受一个std::vector
容器和一个起始索引作为参数。我们实现了operator++
和operator*
方法,以便在循环遍历时能够正确地访问容器内的元素。
在main
函数中,我们创建了一个CircularIterator
实例,并从第二个项开始循环遍历。我们遍历了10次,以便更好地展示循环效果。
这个实现可以很容易地扩展到其他容器类型,例如std::list
或std::deque
。
领取专属 10元无门槛券
手把手带您无忧上云