容器的模板,错误在哪里?

时间:2016-08-09 19:39:58

标签: c++ templates vector containers

我有以下代码,我想为容器大小制作一个模板(例如,矢量,数组,列表等) 在主要我定义一个向量,我从模板调用mysize函数,但我得到一个错误:“看到mysize的声明”。有人可以帮忙吗?

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

template <typename I, typename Op>
Op mysize(I first, I last)
{
    auto it = 0;
    while (first != last) {
        ++first;
        it += 1;
    }
    return it;
}

void  main()
{

    vector<int> v = {1,2,3,4,5,6,7,8};
    auto _begin = v.begin();
    auto _end = v.end();

    auto result = mysize(_begin, _end);

}

1 个答案:

答案 0 :(得分:6)

无法推断Op类型。

这应该有效:

template <typename I, typename Op = std::size_t>
Op mysize(I first, I last)
{
    auto it = 0;
    while (first != last) {
        ++first;
        it += 1;
    }
    return it;
}

或者:

template <typename I>
std::size_t mysize(I first, I last)
{
    std::size_t it = 0;
    while (first != last) {
        ++first;
        ++it;
    }
    return it;
}

或者:

template <typename I>
std::size_t mysize(I first, I last)
{
    return std::distance(first, last);
}