假设我有参考内部索引?
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