【问题标题】:How to implement a slice operator[] in C++? [duplicate]如何在 C++ 中实现切片运算符 []? [复制]
【发布时间】: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 &amp;operator[](int start, int end) -- 你的意图是什么?您要返回参考什么?您正在寻找的内容相当于std::string_viewstd::span (C ++20)。此外,应避免试图让 C++ 看起来像另一种语言。
  • 内置的std::list 有一个splice 方法可以将元素从一个列表移动到另一个列表。

标签: c++ slice


【解决方案1】:

来自n4835

§12.6.2 二元运算符

1 二元运算符应由具有一个参数的非静态成员函数 (11.4.1) 实现 或者通过带有两个参数的非成员函数

所以你不能传入两个参数。

所以尝试一下:

int &operator[](std::tuple<int, int> start_end);

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 2014-07-29
    • 2020-08-17
    • 1970-01-01
    • 2012-08-18
    • 2017-01-29
    • 2011-06-09
    • 2014-10-31
    相关资源
    最近更新 更多