访问2D向量的指针

Access 2D Vector of pointers

本文关键字:指针 向量 2D 访问      更新时间:2023-10-16

我想访问一个对象的变量,通过使用指针,这是一个2d向量。
下面是代码:

class Soldier{
public:
    Soldier(char c){
        type = c;
    }
    char type;
};
int main()
{
//initialising the 2d vector (should give me an empty 2*3 vector)
    vector< vector<Soldier> > *armys = new vector< vector<Soldier> >(2, vector<Soldier>(3));
//fill each of the vector
    Soldier a('x');
    (*armys)[0].push_back(a);
    (*armys)[0].push_back(a);
    (*armys)[0].push_back(a);
    Soldier b('x');
    (*armys).resize(2);
    (*armys)[1].push_back(b);
    (*armys)[1].push_back(b);
    (*armys)[1].push_back(b);
    for (int army = 0; army < (*armys).size(); army++){
        for (int soldier = 0; soldier < (*armys)[army].size(); soldier++){
            cout << (*armys)[army][soldier].type;
        }cout << endl;
    }
}

遗憾的是这不会编译。

我想要的只是:
指针-> (Army1, Army2, Army3,…)每一个->(某些类型的士兵)

谁能给我一个提示或告诉我我做错了什么?

这里调用的内部向量的构造函数的第二个版本:vector<Soldier>(3)需要为Soldier定义一个默认构造函数,因为value形参默认为默认构造值。

由于您提供了以char为参数的构造函数,因此不会生成默认的构造函数。

  • 定义默认构造函数即Soldier() : type('x') {}或add参数的默认值:Soldier(char c = 'x') : type(c) {}
  • 用默认的Soldier构造内部向量s: vector<Soldier>(3, Soldier('x'))

代码现在可以编译了。但是你的armys初始化对我来说没有意义。正如在注释中提到的,这里的指针肯定不会使任何向量包含Soldier*元素,只会导致内存泄漏,因为您忘记删除它。除此之外,您真的需要用初始值填充armys吗?