矢量中的矢量-更改特定元素
Vectors Within Vectors - Changing Specific Elements
这里是初级程序员;我为这个长问题提前道歉。
我成功地创建了一个包含向量的向量,并填充了每个向量。这个想法是为了制作一个小型体育模拟游戏,一个人最多可以雇佣五名球探,而该球探最多可以展示他审查过的五名球员。
以下是主要矢量:
vector <vector<Player*> > MainVector;
下面是进入主通道的矢量:
vector<Player*> SubVector;
子矢量(最终将包含玩家对象)在这里的MainVector内部生成:
for(int i = 0; MainVector.size() < 5; i++)
{
MainVector.push_back(SubVector);
}
每当我雇佣Scout时,它就会用他的玩家对象填充五个子向量中的一个子向量(见下文):
for (int i = 0; i < ScoutsStable[scoutPick]->getScoutPlayerAmount(); ++i)
{
MainVector[scoutPick].push_back (new Player());
Player instance;
}
我需要一个主向量来保存子向量的原因是,如果我执行一个动作,我需要一次移除或擦除一组(或子向量)播放器对象的能力。但我也需要删除或擦除每个子向量中的单个元素(包含单个播放器对象)的能力。
在我雇佣了一些侦察员后,我可以看到每个子矢量中的玩家对象,所以这很好:
for (int i=0; i < ScoutsStable[x]->getScoutPlayerAmount(); ++i)
{
dxTrajanFont25->print (MainVector[number][i]->getPlayerName(),positionX,positionY);
dxTrajanFont25->print (stringConverter(MainVector[number][i]->getPlayerAge()),positionX += 95,positionY);
}
我可以成功地删除一个Scout(从他自己的Vector中删除他),并删除他对应的玩家对象的SubVector:
ScoutsStable.erase (ScoutsStable.begin() + staffNumber);
MainVector.erase (MainVector.begin() + staffNumber);
这也很有效。
但当我重新雇佣一名侦察员时,我会收到"下标超出范围"的错误。我想这可能是因为我正在从MainVector中删除SubVector,但如果MainVector.size()降到5以下,我有一个函数(见上文)push_back一个新的SubVector。因此MainVector始终保持在5个元素。
我不确定我错过了什么?
第二个快速问题是,有人能帮我了解删除SubVector中特定Player对象的确切语法吗?
当我尝试使用从存储在MainVector元素0中的SubVector中删除播放器对象时(例如)
MainVector[0].erase (MainVector[0].begin() + selection);
我收到一条"矢量迭代器+偏移超出范围"的错误消息。我确信这是因为我的语法不正确。
当我尝试访问SubVector本身时,我会遇到编译器错误。
SubVector[0].erase (SubVector[0].begin() + selection);
我应该如何改写该语句,以便删除特定SubVector中的特定Player对象?
提前感谢您的回答-非常感谢,因为这是我完成这个小项目所需要的最后一件事!
如果我理解正确的话,你有一个向量,里面充满了指向玩家对象的指针。
这只是一个建议,但您也可以对长模板初始化进行typedef,以获得更多抽象和可读性。
无论如何,试着像这样删除向量中的项目:
vec.erase(&vec[index]);
此措辞确保您知道要删除的元素的特定内存地址。
另外,您很可能循环出索引。
最后,创建一些函数,这些函数不仅可以对数据结构执行删除操作,还可以释放指针,以确保没有内存泄漏。
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素