参考内部指数?

时间:2011-02-11 05:32:42

标签: c++ vector reference

假设我有

vector<vector<int> > a;

,索引为

a[i][j] = stuff;

其中我是“外部”而j是“内部”......

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

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

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

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

感谢。

2 个答案:

答案 0 :(得分: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 :(得分:1)

这一行:

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

不是对外部向量的引用,而是内部向量之一。另请注意,可能存在许多内部向量。

以下是如何获取外部向量的引用(尽管通常它没有意义):

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

获取对其中一个内部向量的引用看起来像这样:

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