访问指针的2D向量

时间:2015-08-19 20:43:53

标签: c++ pointers vector 2d

我想通过使用指针来访问Object的变量,该指针位于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;
    }
}

可悲的是,这不会编译。

我想拥有的只是:
指针 - &gt; (Army1,Army2,Army3,......)他们每个人 - &gt; (某种类型的士兵)

有人可以给我一个提示或告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

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

由于您提供了构造函数char,因此不会生成默认值。{0}所以要么做到这一点:

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

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