C++ 从C+中的向量中删除元素+;

C++ 从C+中的向量中删除元素+;,c++,C++,我正在编写一个基于足球队名册的程序。每个球员都有球衣号码和等级。我想知道如果用户输入球员的球衣号码,如何删除球员的等级和球衣号码。我定义了两个int向量,一个用于球员球衣号码,另一个用于球员评级。这是我到目前为止为我的删除播放器功能。不知道我做错了什么 void delete_player() { int input; int vecSize = jersey.size(); cout << "Enter a jersey nu

我正在编写一个基于足球队名册的程序。每个球员都有球衣号码和等级。我想知道如果用户输入球员的球衣号码,如何删除球员的等级和球衣号码。我定义了两个int向量,一个用于球员球衣号码,另一个用于球员评级。这是我到目前为止为我的删除播放器功能。不知道我做错了什么

void delete_player()
    {
        int input;
        int vecSize = jersey.size();
        cout << "Enter a jersey number to delete: ";
        cin >> input;
        for (int i = 0; i < vecSize; i++)
        {
            if (input == jersey[i])
            {
                jersey.erase(jersey.begin() + i);
                rating.erase(rating.begin() + i);
            }

        }
    }
void delete_player()
{
int输入;
int vecSize=jersey.size();
cout>输入;
对于(int i=0;i
看起来您在工作中使用了错误的工具。看起来您需要的是一个
std::map
。大概是这样的:

 using jerseyNum = int;
 using rating = int;
 using playerMap = std::map<jerseyNum, rating>;
 playerMap Players;
Players [ newJerseyNum ] = newRating;
您可以通过以下操作删除播放机:

auto foundPlayer = Players.find(jerseyToDelete);
if (foundPlayer != Players.end())
{
     Players.erase(foundPlayer);
}

不需要编写循环来从向量中删除项。使用
erase/remove
习惯用法:

void delete_player()
{
    int input;
    cout << "Enter a jersey number to delete: ";
    cin >> input;
    jersey.erase(std::remove(std::begin(jersey), std::end(jersey), input), jersey.end());
    rating.erase(std::remove(std::begin(rating), std::end(rating), input), rating.end());
}
std::distance
只返回从
begin()
std::find
返回的迭代器的“距离”


但实现两个单独的向量并像这样处理它们是有危险的。如果
jersey
rating
的大小不同,则在从
rating
向量中擦除时,可能会出现越界访问。给出的另一个答案是:<代码> STD::MAP< /Cord>是一个更合适的容器。

对不起,我对C++编程很陌生,我不熟悉如何实现您的建议。对于我的addplayer函数,我只是使用rating/jersey.push_back(输入)将每个球衣号码和等级添加到各自的向量中。对于初学者来说,有没有更简单的方法可以使用vector.erase删除向量中某个元素的特定实例?@AlexCPSC映射使用输入唯一地确定输出。如果将
Players[32]=“John”
写入屏幕,然后将
print(Players[32])
写入屏幕,您将在控制台上看到“John”打印。“键”32唯一地对应于“值”John。可靠的建议和智慧。这样做是行不通的,因为用户必须输入泽西编号作为输入,并删除矢量中带有该泽西编号的元素以及评级矢量中的相应元素。因此,如果一名球员的球衣号码为12,等级为5,而我在控制台中输入了12,则相应的等级不会从等级向量中删除。@AlexCPSC那么另一个答案实际上是您应该使用的(a
std::map
)。如果必须使用
向量
,请参见我的编辑。另外,
std::vector
在使用时容易出错,因为您需要确保
jersey
rating
向量的大小相同。
void delete_player()
{
    int input;
    cout << "Enter a jersey number to delete: ";
    cin >> input;
    auto iter = std::find(std::begin(jersey), std::end(jersey), input);
    if (iter != std::end(jersey))
    {
       auto dist = std::distance(std::begin(jersey), iter);
       jersey.erase(std::begin(jersey) + dist);
       rating.erase(std::begin(rating) + dist);
    }
}