c++ - vector 中的 vector - 更改特定元素

标签 c++ vector

初级程序员在这里;对于这个冗长的问题,我提前表示歉意。

我成功地创建了一个包含 vector 的 vector 并填充了每个 vector 。这个想法是针对一个小型运动模拟游戏,一个人最多可以雇用五名球探,而该球探最多可以展示他评价过的五名球员。

这是主要的载体:

vector <vector<Player*> > MainVector;

下面是进入 main 的 vector :

vector<Player*> SubVector;

SubVectors(最终将包含玩家对象)在 MainVector 内部生成:

for(int i = 0; MainVector.size() < 5; i++)
{
     MainVector.push_back(SubVector);
}

每当我雇佣一个 Scout 时,它就会用他的玩家对象填充五个 SubVector 之一(见下文):

for (int i = 0; i < ScoutsStable[scoutPick]->getScoutPlayerAmount(); ++i)
{
    MainVector[scoutPick].push_back (new Player());
    Player instance;
}

我需要一个主 vector 来保存子 vector 的原因是,如果我执行一个 Action ,我需要能够一次移除或删除一组(或子 vector )玩家对象。但我还需要能够移除或删除每个子 vector 中的单个元素(包含单个玩家对象)。

在我雇佣了一些侦察员之后,我可以在每个 SubVectors 中看到玩家对象,所以这工作正常:

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 中删除)并删除他相应的 Player 对象的 SubVector:

ScoutsStable.erase (ScoutsStable.begin() + staffNumber);
MainVector.erase (MainVector.begin() + staffNumber);

这也很好用。

但是当我去重新雇用一个球探时,我得到了“下标超出范围”的错误。我认为这可能是因为我正在从 MainVector 中删除 SubVector - 但我有功能(见上文)如果 MainVector.size() 低于 5,则推回一个新的 SubVector。因此 MainVector 始终保持在 5 个元素。

我不确定我错过了什么?

第二个快速问题是有人可以帮助我了解在 SubVector 中删除特定玩家对象的确切语法吗?

当我尝试从存储在 MainVector 元素 0 中的 SubVector 中删除播放器对象时(例如)使用:

 MainVector[0].erase (MainVector[0].begin() + selection);

我收到“vector 迭代器 + 偏移量超出范围”错误消​​息。我确定这是因为我的语法不正确。

当我尝试访问 SubVector 本身时出现编译器错误。

SubVector[0].erase (SubVector[0].begin() + selection);

我应该如何改写该语句,以便我可以删除特定 SubVector 中的特定玩家对象?

提前感谢您的任何回答 - 非常感谢,因为这是我完成这个小项目所需要做的最后一件事!

最佳答案

所以如果我理解正确的话,你有一个充满 vector 的 vector , vector 中充满了指向玩家对象的指针。

只是一个建议,但您也可以使用 typedef 长模板初始化以获得更多抽象和更好的可读性。

无论如何,尝试像这样删除 vector 中的项目:

vec.erase(&vec[index]);

这种写法确保你知道你要删除的元素的具体内存地址。

此外,您很可能会循环出索引。

最后,创建不仅对数据结构执行删除操作而且释放指针的函数,以确保没有内存泄漏。

关于c++ - vector 中的 vector - 更改特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21919596/

相关文章:

c++ - 将 vector 数组作为函数参数传递以更改原始值

c++ - 动态 vector 的预期内容

C++ 避免全局变量和单例

math - 在 3D 空间中以角度 θ 向另一个方向旋转后计算向量

c++ - 如何通过 at() 函数访问二维 vector 的索引?

C++ WIN32 WM_KEYDOWN 没有响应

c++ - 来自窗口截图的模板匹配

c++ - 'auto_ptr' 和 STL 容器 : writing an example of erroneous usage

c++ - 我有一个矩阵类如下 :

java - 具有多个参数的 JNI 自定义异常