我想这是一个简单的问题。
向量和列表都有推送和弹出功能,而且 - 更重要的是 - 可以迭代:
for ( auto value : items )
...
但是,std :: vector和std :: list似乎不共享基类。因此,问题是:我如何编写一个接受任何一个函数的功能(或者实际上,任何其他适合实现的函数)?
std::list<int> a;
std::vector<int> b;
DoSomething(a);
DoSomething(b);
我想在没有超载的情况下这样做。如果使用模板,它们不应该导致疯狂的错误消息。例如,以下代码 -
int a;
DoSomething(a);
- 应该在调用网站上导致编译错误, 不在模板内某处!
有人有什么想法吗?
答案 0 :(得分:1)
C ++标准化委员会试图将概念引入C ++ 0x(现在是C ++ 11)来解决您在这里提出的问题。他们被迫在这篇文章的后期退出,所以我们必须等到标准的未来版本。
Boost的BCCL提供便携式临时解决方案。我从来没有使用过图书馆,所以我不能担保或反对它。
答案 1 :(得分:1)
大多数stl算法使用迭代器作为容器的抽象层。
例如sort
需要2个随机访问迭代器来排序:
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
大多数算法都可以用这个习惯用法实现
根据您计划实施的算法,您需要在4种类型的标准迭代器中进行选择
Here是一个链接,可以解释哪种类型更适合