当前位置: 首页 > news >正文

C++ 容器(二)——容器操作

一、容器的修改

容器修改函数

insert():在指定位置插入一个或多个元素
erase():删除指定位置或指定范围的元素
push_back():将元素添加到容器的末尾
pop_back():删除容器的最后一个元素
push_front():将元素添加到容器的开头
pop_front():删除容器的第一个元素
resize():改变容器的大小
capacity():输出的是Vector数组内部存储空间的容量大小

注:1、动态数组Vector没有提供头部增删(push_front()、pop_front())功能(和数组一样,删除除尾部索引的需要修改后面元素的索引值,很繁琐),链表list有。

2、resize():改变容器的大小(能容纳的元素个数)。

代码示例:通过上述函数,实现动态数组vector的增删改查。

#include <vector>
#include <list>
#include <iostream>
#include <string>
using namespace std;int main()
{vector<int>vec = {1,2,3,4,5};list<int>lst = {1,2,3,4,5};auto it = vec.begin();vec.insert(it + 2,10);//在第三个位置插入元素10,迭代器加法操作只适用于vector容器操作it = vec.begin();vec.erase(it + 1);//删除第二个元素// 使用push_back()和pop_back()函数在容器尾部添加和删除元素vec.pop_back();//删除末尾元素vec.push_back(6);//添加末尾元素6// for(it = vec.begin();it != vec.end();it++)// {//     if(it != vec.end()-1)//     cout<<*it<<",";//     else//     cout<<*it;// }for(auto i:vec)//foreach遍历{cout<<i<<",";}cout<<endl;cout<<"vec动态数组的容器中元素个数是:"<<vec.capacity()<<endl;vec.resize(20);cout<<"修改容器大小后的容器元素个数:"<<vec.capacity()<<endl;// cout<<"容器vec所占内存空间大小为:"<<sizeof(vec)<<"字节"<<endl;// 使用push_front()和pop_front()函数在容器头部添加和删除元素lst.pop_front();lst.push_front(10);cout<<"lst中的元素有:";for(auto i = lst.begin();i != lst.end();i++){if(i != lst.end()--)cout<<*i<<",";elsecout<<*i;}return 0;
}

运行结果:

1,10,3,4,6,
vec动态数组的容器中元素个数是:10
修改容器大小后的容器元素个数:20
容器vec所占内存空间大小为:24字节
lst中的元素有:10,2,3,4,5,

 二、容器的操作

容器操作函数
sort():对容器中的元素进行排序 (不适用于list)
reverse():将容器中的元素反转
unique():去除容器中相邻的重复元素
count():计算容器中指定元素的数量
find():在容器中查找指定元素,并返回其位置的迭代器
remove():从容器中删除指定元素(将要删除元素移到末尾)

注:unique()、remove()函数操作方式,vector和list,不同,list(链表)可以直接使用,而vector需要配合erase()删除操作才能使用。

vector代码示例:

vec.erase(unique(vec.begin(),vec.end()),vec.end());
//将相邻并相等的元素,取其一,移动到数组的后面
//返回移动到数组末尾的第一个元素的迭代器
//最后将移动到数组末尾的元素进行删除。vec.erase(remove(vec.begin(),vec.end(),4),vec.end());
//将要移除的元素(4),移动到数组的后面
//返回移动到数组末尾的第一个元素的迭代器
//最后将移动到数组末尾的元素进行删除。

list代码示例:

lst.unique();
lst.remove(4);

 三、案例代码

代码示例:

#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;int main()
{vector<int>vec = {5,3,3,1,4,2};list<int>lst = {5,3,3,1,4,2};sort(vec.begin(),vec.end());for(auto it = vec.begin();it != vec.end();it++){if(it != vec.end()-1)cout<<*it<<",";elsecout<<*it;}cout<<endl;reverse(vec.begin(),vec.end());cout<<"---------------"<<endl;for(auto it = vec.begin();it != vec.end();it++){if(it != vec.end()-1)cout<<*it<<",";elsecout<<*it;}cout<<endl;vec.erase(unique(vec.begin(),vec.end()),vec.end());cout<<"---------------"<<endl;for(auto it = vec.begin();it != vec.end();it++){if(it != vec.end()-1)cout<<*it<<",";elsecout<<*it;}cout<<endl;vec.erase(remove(vec.begin(),vec.end(),4),vec.end());cout<<"---------------"<<endl;for(auto it = vec.begin();it != vec.end();it++){if(it != vec.end()-1)cout<<*it<<",";elsecout<<*it;}cout<<endl;lst.sort();lst.unique();lst.remove(4);cout<<"---------------"<<endl;auto i = lst.begin();advance(i,lst.size()-1);for(auto it = lst.begin();it != lst.end();it++){if(it != i)cout<<*it<<",";elsecout<<*it;}cout<<endl;return 0;
}

运行结果:

1,2,3,3,4,5
---------------
5,4,3,3,2,1
---------------
5,4,3,2,1
---------------
5,3,2,1
---------------
1,2,3,5
http://www.lryc.cn/news/344816.html

相关文章:

  • 操作系统——进程控制
  • Marin说PCB之国产电源芯片方案 ---STC2620Q
  • 已解决java.lang.StringIndexOutOfBoundsException: 字符串索引越界异常的正确解决方法,亲测有效!!!
  • 关于实体类注解@Data、@EqualsAndHashCode(callSuper = true)、@Accessors(chain = true)的作用
  • 5.9号模拟前端面试10问
  • vue3 JSX的使用与警告【JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“】解决办法
  • 一、计算机基础(Java零基础一)
  • 德国著名自动化公司Festo设计了一款仿生蜜蜂,仅重34g,支持多只蜜蜂编队飞行!...
  • 折腾记:C++用开源库Snap7通过S7协议连接西门子PLC
  • Android studio 新版本 NewUI toolbar显示快捷按钮
  • 辛普森公式求函数的近似积分【通用计算】
  • 即插即用 | YOLOv8热力图可视化方法详解,揭秘AI如何「看」世界!【附完整源码】
  • 多线程学习D10 收尾了应该
  • ai可以做思维导图吗?当然是可以的!
  • 景源畅信数字:抖音小店的入住门槛大不大?
  • 鸿蒙开发-ArkTS语言-容器-非线性容器
  • 【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
  • 【设计模式】单例模式的前世今生
  • 厦门网上在线教育系统,线下老师怎么转型到线上网上授课?
  • Spring底层入门(九)
  • 掌握Android Fragment开发之魂:Fragment的深度解析(下)
  • 小巧简单实用的Linux端口转发工具Rinetd
  • HackBar 新手使用教程(入门)
  • <Linux> 权限
  • Nacos Docker 快速部署----解决nacos鉴权漏洞问题
  • 存储或读取时转换JSON数据
  • Spring Data JPA的作用和用法
  • 【go项目01_学习记录08】
  • Java中的线程
  • 顺序表的实现(迈入数据结构的大门)(完整代码)