c++ - 可以定义一个 C++ 变量来接受任何双向迭代器吗?

标签 c++ stl iterator

无论设计是否良好,我的main()方法声明一个变量,该变量需要期望任何满足 BidirectionalIterator 的迭代器基于正在使用的数据结构(由输入参数确定)的定义(特别是 list<>::iteratorvector::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/

相关文章:

c++ - __cplusplus 宏告诉 g++ C 头文件声明不正常工作

c++ - 堆和类析构函数

c++ - 如何重用 ostringstream?

c++ - STL列表异常

python - 如何构建一个基本的迭代器?

java - 如何使用比较器和迭代器对整数 vector 进行排序?

c++ - Boost.Python 与签名左值不匹配

c++ - 具有模板参数的通用 lambda 函数

c++ - 如何使用 STL 对包含相关条目的两个 vector 进行排序?

c++ - 释放一对 vector 中对象的内存