【发布时间】:2020-04-11 23:00:44
【问题描述】:
这可能是一个重复的问题,但我似乎找不到答案...我正在尝试使用operator[] 在 C++ 中实现一个可切片容器,如对象。这是我的实现(不起作用):
class SlicableIntVector{
private:
std::vector<int> vector;
public:
explicit SlicableIntVector(std::vector<int> vector): vector(vector){};
// The usual way of overloading operator[]
int &operator[](int index){
return vector[index];
}
// This version doesn't work as the argument is not binary
int &operator[](int start, int end){
return vector[vector.begin()+start, vector.begin()+start+end];
}
}
};
除了使用另一种方法来实现切片操作之外,我还有哪些选项可以使用operator[] 进行切片?如果我能像 python list 那样获得切片的灵活性,我会很高兴。
【问题讨论】:
-
Operator
[]在设计上只接受一个参数。您可以考虑改用()运算符。 -
int &operator[](int start, int end)-- 你的意图是什么?您要返回参考什么?您正在寻找的内容相当于std::string_view或std::span(C ++20)。此外,应避免试图让 C++ 看起来像另一种语言。 -
内置的
std::list有一个splice 方法可以将元素从一个列表移动到另一个列表。