我正在研究带有我的赋值的向量数组,并且通过这个赋值,我有一些关于二维向量数组的问题。
分配是:列出当前流程并显示其父子关系。
问题
我想传递矢量值只是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
答案 0 :(得分:1)
void function(vector< vector<process> > *matrix)
指定一个指针,它基本上是通过引用传递的。但是,在C ++中,最好避免使用指针并直接传递引用:
void function(vector< vector<process> > &matrix)
和
功能(矩阵); //函数调用