同时适用于std::vector和std::map的c++迭代器



我需要实现一些东西,如果我能创建一个既适用于std::vector又适用于std::map的迭代器,那就容易多了。这可能吗?我说的是STL中的迭代器,而不是创建一个新的自定义迭代器。

我有一个类,在std::vector中存储一些元素。当我有时通过不同的方法返回这些元素时,我使用std::vector<...>::iterator,这个迭代器稍后由程序的其他部分使用。

我想创建一个使用std::map<...>而不是std::vector<...>的新类,所以我不能返回std::vector<...>::iterator,只有std::map<...>::iterator。不,我不想在这门新课中创建一个额外的向量。程序的其他部分需要std::vector<...>::iterator而不是std::map<...>::iterator

可以编写一个接受不同类型迭代器的模板函数。只要将给定的迭代器用作双向迭代器,vector迭代器和map迭代器都可以工作。

你能给我举个例子吗?

标准库头文件<algorithm>中充满了接受不同容器的迭代器的函数模板示例。下面是一个简单的例子:

template<class InputIt, class T>
InputIt find(InputIt first, InputIt last, const T& value)
{
for (; first != last; ++first) {
if (*first == value) {
return first;
}
}
return last;
}

但是如果你在寻找单一的迭代器类型,那么在标准库中没有这样的迭代器。它可以被实现。

如果使用迭代器所做的唯一事情是间接通过它访问对象,那么在大多数情况下,可以使用指针而不是容器的迭代器来实现这一目的。唯一的标准例外是std::vector<bool>,它不能与bool*一起工作。

最新更新