访问指针的二维向量
Access 2D Vector of pointers
我想通过使用指针访问对象的变量,该指针位于二维向量中。
这是代码:
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 , ...) 它们中的每一个 --> (某种类型的士兵)
有人可以给我提示或告诉我我做错了什么吗?
此处调用的内部向量 constructor 的第二个版本:vector<Soldier>(3)
需要定义 Soldier
的默认构造函数,因为值参数默认为 default-构造值。
由于您提供了采用 char
的构造函数,因此不会生成默认构造函数。所以做任何一个:
- 定义默认构造函数 i。 e.
Soldier() : type('x') {}
或添加
参数的默认值:Soldier(char c = 'x') : type(c) {}
- 再次构造内部向量,默认为
Soldier
s : vector<Soldier>(3, Soldier('x'))
代码现在可以编译。但是你的 armys
初始化对我来说没有意义。如评论中所述,此处的指针肯定不会使任何向量包含 Soldier*
元素,只会导致内存泄漏,因为您忘记删除它。除此之外,你真的需要armys
填充初始值吗?
我想通过使用指针访问对象的变量,该指针位于二维向量中。
这是代码:
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 , ...) 它们中的每一个 --> (某种类型的士兵)
有人可以给我提示或告诉我我做错了什么吗?
此处调用的内部向量 constructor 的第二个版本:vector<Soldier>(3)
需要定义 Soldier
的默认构造函数,因为值参数默认为 default-构造值。
由于您提供了采用 char
的构造函数,因此不会生成默认构造函数。所以做任何一个:
- 定义默认构造函数 i。 e.
Soldier() : type('x') {}
或添加 参数的默认值:Soldier(char c = 'x') : type(c) {}
- 再次构造内部向量,默认为
Soldier
s :vector<Soldier>(3, Soldier('x'))
代码现在可以编译。但是你的 armys
初始化对我来说没有意义。如评论中所述,此处的指针肯定不会使任何向量包含 Soldier*
元素,只会导致内存泄漏,因为您忘记删除它。除此之外,你真的需要armys
填充初始值吗?