我想重载[]向量运算符以轻松创建临时子向量。
我认为它会像下面显示的代码。但是,当我尝试编译时,我收到错误:
错误:“operator []”必须是成员函数
其中[]是向量的成员。
#include <vector>
#include <algorithm>
using namespace std
template <class T, int a, int b>
T& operator[](int a, int b)
{
vector<class T> subvector;
copy ( T.begin() + min(a, b), v1.begin() + max(a, b) + 1, back_inserter(subvector) );
if (a > b) {reverse(subvector.begin(), subvector.end());};
}
答案 0 :(得分:2)
虽然像operator+
和operator>>
这样的运算符可以作为独立函数存在,但需要一些特定数量的参数,operator[]
不能。它必须是类的成员函数。
您尝试实现的目标也无法完成,因为operator[]
只能接受一个参数。
只需使用一个功能:
template<typename T>
std::vector<T> make_sub_vector(std::vector<T> const& v, int begin, int end) {
assert(begin < end); // Either this, or you swap them
// if this condition is not met.
// I'm asserting because I don't know
// what to do when they're equal.
return std::vector<T>(v.begin() + begin, v.begin() + end);
}
答案 1 :(得分:1)
根据C ++标准
13.5.5订阅
1 operator []应该是一个非静态成员函数,只有一个参数。它实现了下载
语法 postfix-expression [表达式]
或
postfix-expression [braced-init-list]
因此,对于类型的类对象x,下标表达式x [y]被解释为x.operator[](y)
T如果T::operator[](T1)
存在,并且重载决策机制(13.3.3)选择了运算符作为最佳匹配函数。