如何编写一个接受std :: vector或std :: list的函数?

时间:2013-06-28 00:41:25

标签: c++ list vector std base-class

我想这是一个简单的问题。

向量和列表都有推送和弹出功能,而且 - 更重要的是 - 可以迭代:

for ( auto value : items )
    ...
但是,

std :: vector和std :: list似乎不共享基类。因此,问题是:我如何编写一个接受任何一个函数的功能(或者实际上,任何其他适合实现的函数)?

std::list<int> a;
std::vector<int> b;
DoSomething(a);
DoSomething(b);

我想在没有超载的情况下这样做。如果使用模板,它们不应该导致疯狂的错误消息。例如,以下代码 -

int a;
DoSomething(a);

- 应该在调用网站上导致编译错误, 不在模板内某处!

有人有什么想法吗?

2 个答案:

答案 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是一个链接,可以解释哪种类型更适合