容器模板,错误在哪里?
Posted
技术标签:
【中文标题】容器模板,错误在哪里?【英文标题】:Template for containers, where is the error? 【发布时间】:2016-08-09 19:39:58 【问题描述】:我有以下代码,我想为容器大小制作一个模板(例如向量、数组、列表等) 主要我定义了一个向量并从模板调用 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);
【问题讨论】:
void main()
不好,这是c++——应该是int main()
。
它应该如何猜测你对Op
的意思是什么?
这不是错误。这是错误的尾随部分。错误是什么?
【参考方案1】:
无法推导出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);
【讨论】:
或者在调用mysize的时候指定模板参数? 我相信std::ptrdiff_t
在这种情况下会更合适。以上是关于容器模板,错误在哪里?的主要内容,如果未能解决你的问题,请参考以下文章