为什么这段代码不起作用?
我得到的错误是
T *Vector<T>::begin(Vector<T> &)' : expects 1 arguments - 0 provided
代码:
#include <iostream>
using namespace std;
template<typename T> class Vector
{
public:
T* elem;
int sz;
Vector()
{
elem = new T[2];
sz = 2;
}
template<typename T> T* begin(Vector<T>& x)
{
return &x[0];
}
template<typename T> T* end(Vector<T>& x)
{
return x.begin()+x.size();
}
unsigned int size()
{
return sz;
}
};
int main()
{
Vector<int> ea;
for(auto& s: ea)
// do something
return 0;
}
我也不确定 begin() 和 end() 的 vector 参数,为什么他们需要它?它们已经是成员函数,所以它们应该有“this”作为参数。这段代码是我写的,但是函数是从一本书上摘下来的(他们是 friend 吗??)
最佳答案
您需要 Vector::begin()
和 Vector::end()
(无参数)。并且返回值应该用作迭代器。
这可能是基于范围的循环的类似可能实现:
auto && __range = range_expression;
for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin)
{
range_declaration = *__begin;
// loop_statement
}
因此:
If __range's type is a class type with either or both a begin or an end member function, then begin_expr is __range.begin() and end_expr is __range.end(); 1
所以,应该是:
T* begin()
{
return elem;
}
T* end()
{
return elem + sz;
}
关于c++ - 如何在范围 for 循环中使用 begin() 和 end(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17503279/