访问2D向量的指针
Access 2D Vector of pointers
我想访问一个对象的变量,通过使用指针,这是一个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
吗?
相关文章:
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 如何更改唯一指针向量的可见性
- 如何在基类指针向量的元素上应用重载的多态函数
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 包含指向其他结构的指针向量的结构
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 初始化可变数据结构中的共享指针向量
- 指向具有 decltype 的函数的指针向量
- push_back指向指针向量的指针
- 使用指针向量(带代码)C++(以及对其使用的便利性的怀疑)时出现问题
- 我可以做些什么来改进指针向量中的此搜索?
- 指向指针排序向量的指针向量的 C++ 向量
- 初始化用户定义类的指针向量
- 函数无法识别我在C++传递节点指针向量?
- 如何声明指向类对象的指针向量?
- 指向结构的指针向量的元素具有相同的地址
- 删除指向抽象类的指针向量
- 当我返回指向结构的指针向量时出现段错误
- 用基于范围的for循环填充指针向量