2011-02-11 93 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];