4

我无法在其他地方找到答案,所以我想我只需要问这个:我正在尝试获取向量的别名(其中存储了 int 指针),如下所示:

    void conversion(Engine * ENGINES) 
    {//The Engine class has a vector of int* as a public data member called SITE
        for (int i = 0; i < 3; i++)
        {
            vector <int*>* current = &(ENGINES[i].SITE);//the problematic line
            int j_max = current -> size();
            cout << j_max << endl;
            for (int j = 0; j < j_max; j++)
            {
                for (int k = 0; k < 3; k++)
                {
                     if (*current[j][k] == 2)
                    *current[j][k] = 1;
                     if (*current[j][k] == -1)
                    *current[j][k] = 0;
                }
            }
        }
    }

问题是 *current[a][b] 的索引似乎有反转。我希望能够将 current 用作法线向量,但现在与以下相比,索引是相反的:

vector <int*> current1 = ENGINES[1].SITE;

所以*current[i][j] = current1[j][i]出于某种原因。我的语法有错误吗?

4

3 回答 3

3

我相信您的问题是它[]的优先级高于 unary *。所以你得到*(current[j][k])的不是(*current)[j][k],这就是你想要的。

但是,您可以通过仅获取引用而不是指针来消除该问题:

vector <int*>& current = (ENGINES[i].SITE);然后只需*在访问current.

于 2013-04-09T17:14:38.187 回答
1

问题是它[]的优先级高于*(dereference),因此*current[i][j]被解释为*(current[i][j]),这可能不是你想要的。

实际上,这种别名习惯用法通常表示为引用,而不是指针:

vector <int*>& current = ENGINES[i].SITE;

并简单地使用current[i][j]

于 2013-04-09T17:14:43.630 回答
0

正如我在评论中怀疑的那样,请使用参考。

vector <int*> &current = ENGINES[i].SITE;
于 2013-04-09T17:16:15.240 回答