c/c++ 标准顺序容器 容器的访问,删除 操作

c/c++ 标准顺序容器 容器的访问,删除 操作

pop_front:vector,string不支持

pop_back:forward_list不支持

知识点

1,front, back, at 成员函数的使用,对应代码里的test1

2,删除最后一个元素pop_back, 删除第一个元素pop_front,对应代码里的test2

3,删除指定位置的元素erase,并返回下一位置的迭代器 ,对应代码里的test3

#include <vector>
#include <string>
#include <list>
#include <forward_list>
#include <deque>

using namespace std;

int main(){
  //test1 顺序容器的front, back(forward_list没有back),at成员函数
  //front返回容器里的头元素;back返回容器里的最后一个元素
  /*
  //在解引用一个迭代器或调用front,back之前要检查容器里是否有元素
  deque<int> li{1,2,3,4};
  if(!li.empty()){
    auto val = *li.begin();
    val = 9;//不会改变容器里头元素的值
    cout << li.front() << endl;
    auto val2 = li.front();
    val2 = 8;//不会改变容器里头元素的值
    cout << li.front() << endl;
    auto& val3 = *li.begin();
    val3 = 9;//会改变容器里头元素的值
    cout << li.front() << endl;
    auto& val4 = li.front();
    val4 = 8;//会改变容器里头元素的值
    cout << li.front() << endl;                                                 

    auto val5 = li.end();
    //得到容器的最后一个元素
    auto last = *(--val5);
    cout << last << endl;                                                       

    auto v = li.at(1);
    auto v1 = li[2];
    cout << v << " " << v1 << endl;
  }
  */

  //test2 pop_back, pop_front
  //pop_back:删除容器的最后一个元素;pop_front:删除容器的第一个元素
  /*
  list<int> li{1,2,3,4};
  if(!li.empty()){
    li.pop_back();
    cout << li.back() << endl;
    li.pop_front();
    cout << li.front() << endl;
  }
  */

  //test3 erase
  //删除指定位置的元素,并放回指向删除元素的下一个元素的迭代器
  vector<int> li{0,1,2,3,4,5,6,7,8};
  //删除奇数
  auto b = li.begin();
  while(b != li.end()){
    if(*b % 2){
      b = li.erase(b);
    }
    else{
      ++b;
    }
  }
  for(auto const &s : li){
    cout << s << " ";
  }
  cout << endl;

  auto it = li.begin();
  li.erase(it, it + 2);
  for(auto const &s : li){
    cout << s << " ";
  }
  cout << endl;

}

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

原文地址:https://www.cnblogs.com/xiaoshiwang/p/9643807.html

时间: 2024-10-29 12:05:50

c/c++ 标准顺序容器 容器的访问,删除 操作的相关文章

用C语言实现顺序表的插入和删除算法

什么是线性表? 线性表是n个数据元素的有限序列.根据线性表的显现方式,线性表又分为顺序表(数据元素在内存中的存储空间是连续的)和链表(数据元素在内存中的存储空间是不连续的). 线性表如何用C语言实现?线性表可以进行哪些操作? 在C语言中,线性表通过结构体的方式来实现.结构体中定义了线性表的存储空间地址,当前长度,和当前分配的存储容量.操作包含在指定位置插入某一元素.删除指定元素.查找指定的元素等.在这里重点介绍插入和删除算法. 下面就是关于这一部分内容的陈述. 线性表的C语言实现 需要先定义好的

C++ 容器:顺序性容器、关联式容器和容器适配器

什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种"对象"还包含了一系列处理"其它对象"的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是"容器类是一种对特定代码重用问题的良好的解决方案". 容器还有另一个特点是容器可以自行扩展.在解决问题时

stl中顺序性容器,关联容器两者粗略解释

什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种"对象"还包含了一系列处理"其它对象"的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是"容器类是一种对特定代码重用问题的良好的解决方案". 容器还有另一个特点是容器可以自行扩展.在解决问题时

把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin

如何让不同主机中docker容器可以相互访问

我们都知道同一台主机中的docker容器可以相互访问,那么不同主机中的docker容器间是否可以相互访问呢?答案是可以的,解决思路是在主机中把另外主机上docker容器的网段加入到路由表中. 现有主机A 192.168.124.51,主机B 192.168.124.55,具体步骤如下: 修改一台主机docker容器使用的网段(默认是172.17.x.x),如何修改请看上一篇. 假设已经修改好docker网段,例如主机A中docker容器使用10.1.x.x网段,主机B中docker使用172.1

c++标准库之容器

array 对内置数组进行包装,捆绑常用操作之后就形成了array.array的优点是在时空间效率上与内置数组几乎一致,但比内置数组使用起来顺手.size函数代替 sizeof(arr)/sizeof(arr[0]),back函数代替了 arr[sizeof(arr)/sizeof(arr[0]-1],array还可以进行swap及比较.array的缺点是大小固定. vector 容器大小可动态增长,不能动态缩减的容器.vector支持下标访问,访问速度仅次于内置数组与array.vector在

解决Windows10下无法对docker容器进行端口访问(端口映射的问题)

解决Windows10下无法对docker容器进行端口访问(端口映射的问题) 问题详情 在Windows10系统服务器中安装了docker和docker-compose 并尝试在其中运行Nginx服务,映射也做好 问题:在主机的浏览器中,打开localhost:port无法访问对应的Web服务. 问题解析 原因:docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker. 也就是说,服务中使用

Docker中的Redis容器如何连接上进行操作?

Docker中的Redis容器如何连接上进行操作? 1.登录putty有如下信息: 公用虚拟 IP (VIP)地址42.159.156.115内部 IP 地址10.205.178.22IP address for eth0:    10.205.178.22IP address for docker0: 172.17.42.1 2. 下载 http://download.redis.io/redis-stable/redis.conf修改如下字段 # requirepass foobared去掉

Docker 快速上手系列(2): 容器的概念及相关操作

什么是容器 简单的说,一个镜像想要跑起来需要一个载体,这个载体就是容器,前面的文章我们也提到了,容器加载镜像后会启动一个额外的可写文件层. 我们拿VM举例,VM虚拟的是整个操作系统,然后可以在里面跑引用,容器其实运行的是一个应用或是一组应用,并提供应用所必须的运行环境 创建一个容器 Docker启动一个容器是秒级别的,这也是比VM有有事的一点,所以这里允许用户随时创建,删除,启动,切换容器,这也是体现Docker"轻"的一点 #启动一个容器有两种情况 #第1种是基于镜像创建一个容器并启