【发布时间】:2018-03-12 08:35:36
【问题描述】:
有没有办法编写一个通用循环,它会遍历 stl 映射(关联容器)和列表(非关联容器)的值。
template<typename T>
void foo(T &t)
{
for (auto iter = t.begin(); iter != t.end(); ++iter)
{
printf("%d\n", *iter); // will work for std::list<int> but not for std::map<int, int>
}
}
谢谢
【问题讨论】:
-
它们是两个不同的容器。我想你需要专门化你的函数模板。您可能需要重新考虑/放弃这种方法。已经有一个range based loop。
-
你有应该工作的通用循环,唯一的问题是这种方式的 printf() 函数确实不起作用。我建议使用 c++ 中的 cout,并重载流操作符以在屏幕上打印内容。
-
它们有不同的语义,如果是地图,你想从
*iter得到什么? -
你想达到什么目的?
-
@Rotem 通用循环,例如删除任何集合中的指针