参考内部索引?
Posted
技术标签:
【中文标题】参考内部索引?【英文标题】:Reference to inner index? 【发布时间】:2011-02-11 05:32:41 【问题描述】:假设我有
vector<vector<int> > a;
索引为
a[i][j] = stuff;
其中 i 是“外部”,j 是“内部”...
然后创建对“外部”向量的引用很容易:
vector<int>& b = a[x];
有没有一种很好的方法来创建对内部的引用?
vector<int>& b = a[<don't know>][x];
谢谢。
【问题讨论】:
我不明白这个问题。a
是外部向量,所以a[x]
访问内部向量之一(不只有一个内部向量,因为您已经定义了一个向量向量)。再往下一层,你会得到单个整数。
这个问题令人困惑。如何将 int 引用到 vector不幸的是,不,没有直接的方法来创建这样的引用,因为编译器将其视为
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
向量,并且可能希望根据所存储元素的类型参数化整个结构。我不确定这是否是您要查找的内容,但它至少表明原则上您可以获得所需的行为。
【讨论】:
谢谢,这回答了我的问题。我将编写您的 IndexReverser 类的模板化版本。【参考方案2】:这一行:
vector<int>& b = a[x];
不是对外部向量的引用,而是对内部向量之一的引用。另请注意,可能存在许多内部向量。
这里是如何获得对外部向量的引用(虽然一般来说它是没有意义的):
vector<vector<int> > &outer = a;
获取对其中一个内部向量的引用如下所示:
vector<int> &inner = a[x];
【讨论】:
以上是关于参考内部索引?的主要内容,如果未能解决你的问题,请参考以下文章