📜  在条件c ++中从向量中删除元素(1)

📅  最后修改于: 2023-12-03 14:51:29.101000             🧑  作者: Mango

在条件c++中从向量中删除元素

如果你需要在C++中从一个向量中删除元素,你可以使用标准库中的erase()函数。这个函数带有两个参数:第一个参数是要删除的元素的位置(指向元素的迭代器),第二个参数是要删除的元素的下一个位置(指向元素的迭代器)。为了从vector中删除一个元素,你需要先用vector的erase()函数获取一个迭代器,然后将迭代器传递给erase()函数。

下面是一个例子:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{ 1, 2, 3, 4, 5 };

    // 删除第三个元素
    v.erase(v.begin() + 2);

    // 输出剩余的元素
    for (auto i : v)
    {
        std::cout << i << " ";
    }

    return 0;
}

输出:

1 2 4 5

在上面的例子中,我们使用了vector的erase()函数来从向量v中删除第三个元素。我们首先使用v.begin() + 2调用erase()函数来获取第三个元素的迭代器,并将该迭代器传递给erase()函数。erase()函数将删除该元素,并将后面的元素向前移动以填补空白位置。

注意,使用v.erase()只会删除一个元素。如果要删除多个元素,可以在循环中多次调用erase()函数,或者使用其他函数,例如std::remove(),它会将待删除的元素移动到向量的末尾,并返回最后一个未删除元素的后一个位置的迭代器。在这个位置之后的所有元素都被视为“垃圾”,可以使用vector的erase()函数一次性删除它们。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> v{ 1, 2, 3, 4, 5, 3 };

    // 删除3
    v.erase(std::remove(v.begin(), v.end(), 3), v.end());

    // 输出剩余的元素
    for (auto i : v)
    {
        std::cout << i << " ";
    }

    return 0;
}

输出:

1 2 4 5

在上面的例子中,我们使用了std::remove()函数来将所有等于3的元素移动到向量的末尾,并返回一个指向移动后的元素的新末尾的迭代器。我们将该迭代器传递给v.erase()函数,以一次性删除所有3的元素。注意,v.erase()函数只接受一个迭代器或两个迭代器作为参数,不能直接传递一个值。