std list erase

std::list是C++标准库中的双向链表容器。它在头文件<list>中定义,并且属于命名空间std。std::list提供了一种高效的方式来存储和操作元素,它允许在任意位置插入和删除元素,并且支持双向迭代器进行遍历。

std::list的特点包括:

  • 双向链表结构:每个节点都包含指向前一个节点和后一个节点的指针,因此可以在常量时间内进行插入和删除操作。
  • 动态内存分配:std::list使用动态内存分配来管理节点,因此可以根据需要动态调整容器的大小。
  • 不支持随机访问:由于std::list是链表结构,因此不能像数组或向量那样通过索引直接访问元素,只能通过迭代器进行遍历和访问。

#include <iostream>
#include <list>

int main() {
    std::list<int> myList;

    // 在末尾插入元素
    myList.push_back(1);
    myList.push_back(2);
    myList.push_back(3);

    // 在开头插入元素
    myList.push_front(0);

    // 遍历并输出元素
    for (auto it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // 删除第一个元素
    myList.pop_front();

    // 删除最后一个元素
    myList.pop_back();

    // 遍历并输出元素
    for (auto it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

std::list是C++标准库中的一个容器,它是一个双向链表。erase()函数是std::list容器中的一个成员函数,用于删除容器中的元素。erase()函数有两种用法:

  1. 删除单个元素:

iterator erase (iterator position);

这个函数接受一个迭代器作为参数,表示要删除的元素的位置。它返回一个指向被删除元素之后元素的迭代器。

  1. 删除一个范围内的元素:

iterator erase (iterator first, iterator last);

这个函数接受两个迭代器作为参数,表示要删除的范围。它删除[first, last)范围内的所有元素,并返回一个指向被删除元素之后元素的迭代器。

下面是一个示例代码,演示了std::list erase()函数的用法:

 

#include <iostream>

#include <list>

int main()

{ std::list<int> myList = {1, 2, 3, 4, 5}; // 删除单个元素

auto it = myList.begin(); ++it; // 移动到第二个元素 it = myList.erase(it); // 删除第二个元素

std::cout << "After erasing one element: "; for (auto num : myList) { std::cout << num << " "; } std::cout << std::endl; // 删除一个范围内的元素 auto first = myList.begin(); auto last = myList.end(); --last; // 移动到最后一个元素 myList.erase(first, last); // 删除第一个元素到倒数第二个元素 std::cout << "After erasing a range: "; for (auto num : myList) { std::cout << num << " "; } std::cout << std::endl; return 0; }

输出结果:

 

After erasing one element: 1 3 4 5 After erasing a range: 5

 

#include <iostream> #include <vector>

int main()

{ std::vector<int> vct = {1, 2, 3, 4, 5}; // 使用erase函数删除指定元素

for (std::vector<int>::iterator it = vct.begin(); it != vct.end();)

{ if (*it == 3) { it = vct.erase(it); }

   else { ++it; } } // 输出删除后的vector

 for (int num : vct)

{

  std::cout << num << " ";

}

std::cout << std::endl; return 0;

}

这段代码使用了if-else语句来判断是否需要删除vector中的元素。具体来说,代码遍历了一个名为vct的vector,如果当前元素等于3,则使用erase()函数删除该元素,并将迭代器指向下一个元素;否则,将迭代器自增,指向下一个元素。

使用if-else语句的原因是为了在删除元素后正确更新迭代器的位置。当删除元素时,erase()函数会返回指向被删除元素之后元素的迭代器,因此需要将迭代器指向erase()函数返回的迭代器,以确保不会跳过下一个元素。

如果不使用if-else语句,而是直接使用erase()函数删除元素后,迭代器会指向被删除元素之后的下一个元素,而不是下一个元素。这样会导致迭代器跳过一个元素,从而遍历不到所有的元素。

因此,使用if-else语句来判断是否需要删除元素,并根据判断结果更新迭代器的位置,可以确保正确地遍历和删除vector中的元素。

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值