向量push_back矢量

时间:2013-04-05 16:13:22

标签: c++ vector process push-back multi-level

我正在用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”?

6 个答案:

答案 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]返回对sizemultilevel - 向量的引用,然后在该向量上调用成员函数{{ 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