📌  相关文章
📜  从向量c ++中按索引删除元素(1)

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

从C++向量中按索引删除元素

C++中的向量是一种动态数组,它可以自动调整大小以适应新增或删除的元素。如果你想从向量中按索引删除一个元素,以下是一些方法供你参考。

方法一:使用erase函数
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    int index = 2; // 要删除的元素的索引
    vec.erase(vec.begin() + index);
    // 或者,你可以使用下面这个以vector.end()为参数的形式
    // vec.erase(vec.end() - index - 1);
    
    // 打印删除元素后的向量
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

通过使用erase函数,你可以传递一个迭代器来指定要删除的元素的位置。在这个例子中,我们使用vec.begin() + index来获取指向要删除元素的迭代器,并使用erase函数来删除该元素。请注意,这里的index是从0开始计数的。

方法二:使用erase-remove惯用法

这是一种常用的删除元素的惯用法。它使用了利用remove函数将要删除的元素移动到末尾,并使用erase函数从向量中删除所有位于末尾的元素的技巧。

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

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    int index = 2; // 要删除的元素的索引
    vec.erase(std::remove(vec.begin(), vec.end(), vec[index]), vec.end());
    
    // 打印删除元素后的向量
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

在这个例子中,我们首先通过vec[index]获取要删除的元素,然后使用remove函数将所有与该元素相等的元素移动到向量的末尾。最后,我们使用erase函数从末尾开始删除所有被移动到末尾的元素。

方法三:使用swap和pop_back函数

这种方法通过与最后一个元素交换要删除的元素,然后使用pop_back函数从向量中删除最后一个元素来实现删除操作。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    int index = 2; // 要删除的元素的索引
    std::swap(vec[index], vec.back());
    vec.pop_back();
    
    // 打印删除元素后的向量
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

在这个例子中,我们首先使用swap函数将要删除的元素与向量的最后一个元素进行交换。然后,我们使用pop_back函数从向量中删除最后一个元素,从而实现删除操作。

以上是从C++向量中按索引删除元素的三种常用方法。根据你的需求和代码的复杂性,你可以选择最适合你的方法来删除元素。