【发布时间】:2025-11-22 18:10:01
【问题描述】:
比如在这个sn -p beg & end 中,好像被用作指针。然而在函数声明 In *beg 中,In *end 既不提供也不被 c++ 编译器接受。为什么我们像指针一样使用它而不像函数的指针参数一样声明它?
#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>
using namespace std;
template<class In, class X> void myreplace (In beg, In end, const X& x, const X& y)
{
while (beg != end)
{
if (*beg == x) *beg = y;
beg++;
}
}
int main()
{
vector<int> veca = { 1, 3, 4, 4, 1, 4, 4 };
myreplace(veca.begin(), veca.end(), 4, 2);
copy(veca.begin(), veca.end(), ostream_iterator<int>(cout, ","));
}
【问题讨论】:
-
迭代器是用于迭代它们所属的底层容器的抽象。由于它们以特定于容器的顺序指向元素,因此它们被用作指针。否则,它们就是对象。
-
迭代器概念的重点在于,您可以抽象出如何迭代集合的关注点,而只依赖于标准暴露的迭代器方法。