23

我正在用 C++ 设计一个多级队列过程模拟器,但是在尝试实现多个队列时遇到了问题(我的队列是向量)。所以,“多级”是一个 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

在谈论“多级”时不能使用上面的行,因为这个数组只接受参数类型:vector < t_PCB >

所以,正如我一开始问的那样:如何将对象类型“t_PCB”推入“多级”?

4

6 回答 6

27

通过做这个:

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]返回对sizeinside 的第-个向量的引用multilevel,然后在该向量上调用成员函数push_back(p),该函数将元素附加p到它。

于 2013-04-05T16:18:11.297 回答
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;
于 2013-11-08T07:38:55.257 回答
4

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

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

vector<vector<t_PCB>> multilevel(4);
multilevel[0].push_back(p)
于 2013-04-05T16:17:02.970 回答
2

您可以创建一个向量而不是数组:

std::vector< std::vector<t_PCB>> multilevel(4); // 2 dim array, 1st dim is 4

然后你可以push_backWHICH在用这种方式索引的向量的末尾:

multilevel[WHICH].push_back(p)
于 2013-04-05T16:25:07.187 回答
0

只是把它放在那里,访问向量的向量:

multilevel[outer][inner]

whereouter将返回该索引处的向量,进一步索引 withinner将返回t_PCB对象。您还可以使用.at()函数替换数组样式索引以进行边界检查。

于 2015-06-11T19:42:54.817 回答
-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
于 2016-05-25T06:59:45.623 回答