无论设计是否良好,我的main()
方法声明一个变量,该变量需要期望任何满足 BidirectionalIterator
的迭代器基于正在使用的数据结构(由输入参数确定)的定义(特别是 list<>::iterator
或 vector::iterator
)。因为我无法模板 main()
方法,如何实现这一目标?
例如,而不是:
int main(int argc, const char* argv[]) {
vector<Person>::iterator iterator0;
list<Person>::iterator iterator1);
multimap<string, Person>::iterator iterator2;
}
因为所有迭代器都满足 BidirectionalIterator
的要求,我想做:
int main(int argc, const char* argv[]) {
bidirectionaliterator iterator0;
}
然后,我不必不断检查程序使用 if 语句使用哪种数据结构来存储迭代器并使用我想要的迭代器。
最佳答案
听起来你想要 typedef:
typedef std::vector<Person> person_container;
typedef person_container::iterator mybidirectionaliterator;
那么无论何时你想更改底层容器,你所要做的就是更改 std::vector<Person>
到别的东西。虽然,您仍然不能在这里分配任何迭代器,但您必须使用兼容的迭代器。不过,你熟悉auto
吗? C++11 中的关键字?很多时候你不再需要写出迭代器,即 auto myiter = some_container.begin();
就足够了。
此外,为了获得更好的答案,它有助于展示您如何使用迭代器,而不仅仅是声明它。
关于c++ - 可以定义一个 C++ 变量来接受任何双向迭代器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929559/