假設我有參考內部索引?
vector<vector<int> > a;
其索引爲
a[i][j] = stuff;
其中,i是 「外」 和j爲 「內」 ...
然後創建與「外的參考「向量很容易:
vector<int>& b = a[x];
有沒有一種很好的方式來創建一個引用我nner?
vector<int>& b = a[<don't know>][x];
謝謝。
假設我有參考內部索引?
vector<vector<int> > a;
其索引爲
a[i][j] = stuff;
其中,i是 「外」 和j爲 「內」 ...
然後創建與「外的參考「向量很容易:
vector<int>& b = a[x];
有沒有一種很好的方式來創建一個引用我nner?
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<int>& b = a[x];
不是參考外矢量但內載體的相當之一。另外請注意,可能有許多內部向量。
下面是如何獲取到外向量的參考(雖然在總體上是毫無意義的):
vector<vector<int> > &outer = a;
前往內向量的一個參考看起來是這樣的:
vector<int> &inner = a[x];
我不明白這個問題。 `a`是外部向量,因此`a [x]`訪問內部向量之一(因爲您定義了向量向量,所以不只有一個內部向量)。進一步向下,你可以得到個體整體。 – 2011-02-11 05:36:59
問題很混亂。你怎樣才能將int引用到向量中。 –
2011-02-11 05:42:23