gpt4 book ai didi

c++ - 引用内部索引?

转载 作者:行者123 更新时间:2023-11-30 04:35:50 25 4
gpt4 key购买 nike

假设我有

vector<vector<int> > a;

索引为

a[i][j] = stuff;

其中 i 是“外部”,j 是“内部”...

然后创建对“外部” vector 的引用很容易:

vector<int>& b = a[x];

有没有一个很好的方法来创建对内部的引用?

vector<int>& b = a[<don't know>][x];

谢谢。

最佳答案

不幸的是,不,没有直接的方法来创建这样的引用,因为编译器是这样处理的

a.operator[] (/* ... don't know ... */).operator[] (x);

这只有在第一次调用 operator [] 时实际交回一个 vector 时才有意义。

但是,您可以通过引入专门处理该行为的新类来伪造该行为。这个想法是让此类存储第二个索引并提供一个 operator[] 函数,该函数在给定第一个索引的情况下在 vector 中查找实际值。这是一个示例:

class IndexReverser { // Or, your favorite name
public:
IndexReverser(vector< vector<int> >& v, size_t index);

int& operator[] (size_t firstIndex);

private:
vector< vector<int> >& realVector;
const size_t secondIndex;
};

IndexReverser::IndexReverser(vector< vector<int> >&v,
size_t index) : realVector(v), secondIndex(index) {
// Handled in initialization list
}
int& IndexReverser::operator[] (size_t firstIndex) {
return realVector[firstIndex][secondIndex];
}

然后你可以这样写,例如:

IndexReverser ir(a, j);
ir[i] = 137;

您可能需要提供一个孪生类来处理 const vector ,并且可能希望根据所存储元素的类型对整个结构进行参数化。我不确定这是否是您正在寻找的,但它至少表明原则上您可以获得您想要的行为。

关于c++ - 引用内部索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4965942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com