我正在用C ++设计一个多级队列进程模拟器,但是在尝试实现多个队列时遇到了问题(我的队列是向量)。所以, “multilevel”是一个4元素数组(不是向量)。在每个元素内部都有一个向量(类型为t_PCB)。
vector<vector<t_PCB>> multilevel[4];
我的问题是:如何在这4个t_PCB
向量的末尾插入一个元素?提前谢谢。
我已尝试过下面的代码行,但它不起作用(错误:调用'push_back'不匹配成员函数)
multilevel[0].push_back(p); //where "p" is a t_PCB object
在讨论“multilevel”时,不能使用上面的行,因为这个数组只接受参数类型:vector&lt; t_PCB&gt;
所以,正如我在开头问的那样:如何在“多级”中推送对象类型“t_PCB”?
答案 0 :(得分:22)
通过这样做:
vector<vector<t_PCB> > multilevel[4];
您声明了一个包含四个零大小vectors
的数组,其中每个都可以包含vector<t_PCB>
类型的对象。您可能想要做的是:
vector<vector<t_PCB> > multilevel(4);
// ^^^
这将实例化一个类型为vector<t_PCB>
的四个默认初始化对象的向量。然后,您可以这样做:
multilevel[size].push_back(p);
但请注意,矢量索引(如数组索引)是从零开始的,因此size
必须小于矢量的大小。
在上面的表达式中,子表达式multilevel[size]
返回对size
内multilevel
- 向量的引用,然后在该向量上调用成员函数{{ 1}},将元素push_back(p)
附加到其中。
答案 1 :(得分:18)
声明二维向量类似于声明一个数组。你也可以用同样的方式使用它......
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;
答案 2 :(得分:4)
您正在创建一个vector<vector<t_PCB>>
而不是单个对象的数组。
我认为做正题的正确方法是:
vector<vector<t_PCB>> multilevel(4);
multilevel[0].push_back(p)
答案 3 :(得分:2)
您可以创建一个向量而不是数组:
std::vector< std::vector<t_PCB>> multilevel(4); // 2 dim array, 1st dim is 4
然后您可以push_back在以WHICH
索引的向量的末尾{/ 3>}:
multilevel[WHICH].push_back(p)
答案 4 :(得分:0)
只是把它放在那里,访问矢量矢量:
multilevel[outer][inner]
其中outer
将返回该索引处的向量并进一步索引
使用inner
将返回t_PCB
对象。您还可以使用.at()函数替换数组样式的索引以进行边界检查。
答案 5 :(得分:-1)
vector<vector<int>> vec; // declare 2D vector
for (int i=0; i<=3; i++) {
vector<int> row; // create a row vector which adds a row to vec
for (int j=0; j<=4; j++) {
row.push_back(j*10); // push elements 0,10,20,30,40 to row
}
vec.push_back(row); // add this row to vec
// Repeat this procedure 4 times to make a 4*5 2D vector
}
cout<<"output is "<<vec[2][4]; // output is 40