向量push_back矢量

kar*_*l71 21 c++ vector process push-back multi-level

我正在用C++设计一个多级队列进程模拟器但是在尝试实现多个队列时遇到了问题(我的队列是向量).所以,"multilevel"是一个4元素数组(不是向量).在每个元素内部都有一个向量(类型为t_PCB).

vector<vector<t_PCB>> multilevel[4];
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何在这4个t_PCB向量的末尾插入一个元素?先感谢您.

我已经尝试了下面的代码行,但它不起作用(错误:不匹配成员函数调用'push_back')

multilevel[0].push_back(p); //where "p" is a t_PCB object
Run Code Online (Sandbox Code Playgroud)

在讨论"multilevel"时,不能使用上面的行,因为这个数组只接受参数类型:vector <t_PCB>

所以,正如我在开头问的那样:如何在"multilevel"中推送对象类型"t_PCB"?

And*_*owl 23

通过做这个:

vector<vector<t_PCB> > multilevel[4];
Run Code Online (Sandbox Code Playgroud)

声明一个四个零大小的数组vectors,每个数组都可以包含类型的对象vector<t_PCB>.你可能想要做的是:

vector<vector<t_PCB> > multilevel(4);
//                               ^^^
Run Code Online (Sandbox Code Playgroud)

这将实例化一个类型的四个默认初始化对象的向量vector<t_PCB>.然后,你可以这样做:

multilevel[size].push_back(p);
Run Code Online (Sandbox Code Playgroud)

但请注意,矢量索引(如数组索引)是从零开始的,因此size必须小于矢量的大小.

在上面的表达式中,子表达式multilevel[size]返回对size-th向量内部的引用multilevel,然后在该向量上调用成员函数push_back(p),该函数将元素附加p到它.


p.j*_*p.j 19

声明二维向量类似于声明一个数组.你也可以用同样的方式...

vector<vector<int> > vec;

for(int i = 0; i < 5; i++)
{
    vector<int> row;
    vec.push_back(row);
}

vec[0].push_back(5);
cout << vec[0][0] << endl;
Run Code Online (Sandbox Code Playgroud)


Hug*_*rrá 5

您正在创建一个数组vector<vector<t_PCB>>而不是单个对象。

我认为做你想做的事情的正确方法是:

vector<vector<t_PCB>> multilevel(4);
multilevel[0].push_back(p)
Run Code Online (Sandbox Code Playgroud)