C ++,如何将2维Vector数组传递给函数

时间:2016-04-13 08:15:45

标签: c++ arrays vector

我正在研究带有我的赋值的向量数组,并且通过这个赋值,我有一些关于二维向量数组的问题。

分配是:列出当前流程并显示其父子关系。

问题

我想传递矢量值只是ppids [i]这样做我只写了写

vector<process*>

如果我的函数参数声明为

vector<vector<process*>> 

它必须写&#34; ppids&#34;所以这不是我的意图。

错误

Cannot convert 1 parameter from 'std::vector<process *,std::allocator<_Ty>>'to 'std::vector &'

所以,这是我的代码。 (只是我代码的一部分)

结构矢量:

struct process {
    string procName;
    DWORD procPid;
    DWORD procPpid;
}; 

主向量,获取msdn API上的进程信息

std::vector <process*> myProcess;

以下主要部分...

//
//  Group Vector by PPid

        //****(here is 2 dimension vector)****
std::vector< std::vector< process* > > ppids;

int n = 0;
int index = 1;
for (int i = 0, size = tempPid.size(); i < size; ++i) {
    ppids.push_back(vector<process*>());

    for (int j = 0, size2 = myProcess.size(); j < size2; ++j) {
        if (myProcess[j]->procPpid == tempPid[i]) {
            ppids[n].push_back(myProcess[j]);
        };
    }

    for (int k = 0, size3 = ppids[n].size(); k < size3; ++k)
    {
        _tprintf(TEXT("%d \t"), index);
        index++;

        _tprintf(TEXT("[%s]"), ppids[n][k]->procName.c_str());
        _tprintf(TEXT("[%d]"), ppids[n][k]->procPid);
        _tprintf(TEXT("[%d] \n"), ppids[n][k]->procPpid);
    }

    n++;
}
myProcess.clear();

此处调用该函数。

// Combine vector
myProcess = ppids[0];
std::vector <process*> tmpProcess;
for (int i = 1, size = ppids.size(); i < size; ++i) {
    tmpProcess = combine(myProcess, ppids[i]);
    myProcess.clear();
    myProcess = tmpProcess;
}

最后,这是我的功能。

vector<process*> combine(vector<process*> tempA, vector<process*> tempB) {
    std::vector <process*> alloProcess;
    for (int i = 0, size = tempA.size(); i < size; ++i) {
        if (tempA[i]->procPid == tempB[1]->procPpid)
        {
            alloProcess.push_back(tempA[i]);
            for (int j = 0, size2 = tempB.size(); j < size2; ++j) {
                alloProcess.push_back(tempB[j]);
            }
        }
        else {
            alloProcess.push_back(tempB[i]);
        }
    }
    return alloProcess;
}

此处的完整代码: https://gist.github.com/anonymous/25e636086bbfacbec78508736935d3af

1 个答案:

答案 0 :(得分:1)

void function(vector< vector<process> > *matrix)

指定一个指针,它基本上是通过引用传递的。但是,在C ++中,最好避免使用指针并直接传递引用:

void function(vector< vector<process> > &matrix)

功能(矩阵); //函数调用