2011-02-11 52 views
1

假设我有参考内部索引?

vector<vector<int> > a; 

其索引为

a[i][j] = stuff; 

其中,i是 “外” 和j为 “内” ...

然后创建与“外的参考“向量很容易:

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

有没有一种很好的方式来创建一个引用我nner?

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

谢谢。

+0

我不明白这个问题。 `a`是外部向量,因此`a [x]`访问内部向量之一(因为您定义了向量向量,所以不只有一个内部向量)。进一步向下,你可以得到个体整体。 – 2011-02-11 05:36:59

+0

问题很混乱。你怎样才能将int引用到向量中。 – 2011-02-11 05:42:23

回答

1

不幸的是,没有,有创造这样的一个参考,因为编译器处理这个喜欢

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载体,而且很可能会想参数整个结构关于正在存储的元素的类型。我不确定这是不是你要找的东西,但它最少表明,原则上你可以得到你想要的行为。

1

这条线:

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

不是参考外矢量但内载体的相当之一。另外请注意,可能有许多内部向量。

下面是如何获取到外向量的参考(虽然在总体上是毫无意义的):

vector<vector<int> > &outer = a; 

前往内向量的一个参考看起来是这样的:

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