【发布时间】:2022-01-07 21:28:35
【问题描述】:
编辑:MyClass 已重命名为 ReverseStringAccess 以消除歧义。
我有一个封装了vector<string> 的类。该类有一个重载的operator[],可用于读取和修改向量的内容。这是它的外观(最低限度):
class ReverseStringAccess {
public:
ReverseStringAccess() {}
ReverseStringAccess(vector<string> _arr) arr(_arr) {}
string& operator[](int index) {
return arr[index];
}
private:
vector<string> arr;
};
现在我需要能够修改向量中每个字符串的内容,而无需直接访问向量(即某种operator[][],它只适用于属于此类成员的向量)。问题是使用ReverseStringAccess[][] 将导致operator[] 在字符串上的默认行为。比如这个语句:
ReverseStringAccess[i][j]
将给出向量中第 ith 字符串的 jth 字符。但我希望它(例如)改为获取向量中 ith 字符串的 (length - j - 1)th 字符,其中 length 是第 ith 字符串的长度。
这可能吗?如果是,怎么做?
【问题讨论】:
-
“不直接访问向量就修改向量中每个字符串的内容”是什么意思?为什么您当前的代码无法修改字符串?使用
myclass[…][…] = x应该完全符合您的要求,不是吗? -
“问题是使用
MyClass[][]会导致operator[]对字符串的默认行为。”为什么会出现这个问题? -
是的,但是如果我需要
myClass[i][j]来引用arr[i][arr[i].size() - j - 1],即如果我希望它从后面访问字符串呢? -
@WaisKamal 这没什么意义,这应该完成什么?
-
现场演示:godbolt.org/z/9xsGqrsan。 另一个类有什么问题?