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

1.序列式容器-vectorlist

vector是一个动态数组,方便存放所有类型的变量。顺序存放在内存空间里面,当预申请的空间不足时:①首先申请一片更大的内存空间②将原数据拷贝进新空间③释放原空间
如图1所示:
在这里插入图片描述
为什么要保留预留空间,原因是防止频繁的内存申请和释放,一般都会多申请两倍的空间。
vector常用方法:

push_back()		//从尾部加入元素
pop_back()		//从尾部弹出元素
size()				//获取vector大小
insert()			//在指定位置插入元素
earse()			//删除指定元素
clear()			//情空vector

对vector其它操作:

reverse()		//反转vec
sort()			//对vec里面的元素进行排序

示例代码:

//
// Created by wsk on 25-10-20.
//
#ifndef VECTOR_H
#define VECTOR_H
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;inline void testvector()
{vector<int> vec(2,9);auto it1 = vec.begin();while (it1 != vec.end()){cout <<*it1<<" " ;++it1;}cout << endl;cout << "size=" << vec.size() << endl;cout << "capacity=" << vec.capacity() << endl;vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);cout << "size=" << vec.size() << endl;cout << "capacity=" << vec.capacity() << endl;vec.pop_back();vec.pop_back();// 9 9 1 2 3const auto it2 = find(vec.cbegin(), vec.cend(), 1);if (*it2){vec.erase(it2);// 9 9 2 3// cout << *it2 << endl;// 2}auto it3 = vec.begin();while (it3 != vec.end()){cout <<*it3<<" " ;++it3;}cout << endl;const auto it4 = find(vec.cbegin(), vec.cend(), 2);if (*it4){vec.insert(it4, 3,7);// 9 9 7 7 7 2 3}for(int i= 0;i<vec.size();i++){cout <<vec[i]<<" " ;}cout << endl;// reverse(vec.begin(), vec.end());// 反转sort(vec.begin(), vec.end());// 排序for(int i= 0;i<vec.size();i++){cout <<vec[i]<<" " ;}cout << endl;vec.erase(vec.begin()+5);cout << vec[5]<<endl;vec.clear();cout << "size=" << vec.size() << endl;cout << "capacity=" << vec.capacity() << endl;
}
#endif //VECTOR_H

通过sort来自定义比较规则:

// 内置比较器
sort(vec.begin(), vec.end(),less_equal<int>());// 默认行为,升序排序
sort(vec.begin(), vec.end(),greater_equal<int>());// 降序排序// 函数指针
struct Person {std::string name;int age;
};
bool ageGreater(const Person& a, const Person& b) {return a.age > b.age;  // 年龄大的在前(降序)
}
std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}};
std::sort(people.begin(), people.end(), ageGreater);  // 传入函数指针

list是一个双向链表,数据随机存取在内存里面,在逻辑上是有序的。
下面对插入操作进行简单的图解
在这里插入图片描述
list常用方法:

push_back();
insert();
push_front();
erase();
clear();
unique();		// 连续相同的元素只保留一个
splice();		// 拼接两个链表
merge();		// 归并两个有序链表
reverse();
sort();

示例代码:

//
// Created by wsk on 25-10-20.
//
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;int main()
{vector<int> v1 = {3 ,4 ,5 ,8 ,11};list<int> mylist(1,0);list<int> mylist2(v1.begin(),v1.end());// 3 4 5 8 11// auto it = mylist2.begin();// while (it != mylist2.end())// {//     cout << *it << " ";//     ++it;// }// cout << endl;mylist.push_back(1);mylist.push_back(2);mylist.push_back(3);mylist.push_back(4);const auto it2 = find(mylist.begin(),mylist.end(),3);if (*it2){mylist.insert(it2,99);// 0 1 2 99 3 4}// auto it = mylist.begin();// while (it != mylist.end())// {//     cout << *it << " ";//     ++it;// }auto it3= find(mylist.begin(), mylist.end(), 3);if (*it3){// mylist.erase(it3);cout << *(mylist.erase(it3)) << endl;// 4}// auto it = mylist.begin();// while (it != mylist.end())// {//     cout << *it << " ";// 0 1 2 99 4//     ++it;// }auto it4 = find(mylist.begin(), mylist.end(), 99);if (*it4){mylist.splice(it4,mylist2);// 拼接 0 1 2 3 4 5 8 11 99 4}// mylist.reverse();// 反转 4 99 11 8 5 4 3 2 1 0reverse(mylist.begin(),mylist.end());// 反转mylist.sort();// 排序 0 1 2 3 4 4 5 8 11 99// mylist2.sort();// 不能使用算法头文件里面的sort因为算法头文件里面默认的iterator是随机访问迭代器和链表里面的迭代器不一样// mylist.merge(mylist2);// 归并,前提是两个链表要有序 list:0 1 2 99 list2:3 ,4 ,5 ,8 ,11// mylist.unique();// 连续的相同元素只保留一个// mylist.remove(3);// 删除指定元素// mylist.clear();auto it = mylist.begin();while (it != mylist.end()){cout << *it << " ";++it;}return 0;
}
http://www.dtcms.com/a/512102.html

相关文章:

  • 长沙外贸建站用spl做网站
  • 无锡网站建设818gxwordpress 迁移 域名
  • 使用beautifulSoup提取信息
  • 一种独特机理驱动的化学反应分类器详解
  • 南京佛搜做网站公司wordpress支付宝支付
  • C++ 多态:面向对象编程中的灵活性与扩展性
  • 微信公众号内嵌网站开发做团购的的网站有哪些
  • 当前非英语国家中出现的“去英语化”趋势
  • CR后的反思、编辑表格实现
  • MyBatis-Plus黑马
  • 网站建设需要几个部门网站首页布局设计
  • C语言基础入门--指针
  • 計組-中斷與子程序調用的區別
  • 做牛津布面料在哪个网站找客户八大员继续教育入口
  • SD-WAN是什么?与MPLS,MSTP,IPSEC,SSL 有什么区别?
  • 【操作系统】408操作系统核心考点精讲:宏内核、微内核与外核架构全解析​
  • EXCEL文本数字如何批量转换为数字
  • Linux 文件权限深度解析:从原理到实战管理
  • SpringMVC 数据校验和BindingResult以及自定义校验注解
  • [明道云专栏·里程碑] 从第一篇到第一百篇:这是一场属于“低代码实战者”的长跑
  • Ubuntu 安装 Harbor
  • 网站屏蔽ip地址河南网站备案系统短信
  • 中科院网站做的好的院所双鸭山网站建设公司
  • Linux配置Samba文件共享并访问Windows文件
  • Cursor配置markdown转Word的MCP工具教程
  • 常见springboot相关注解
  • ◆comfyUI教程◆第2章13节 XL模型专用工作流与refiner精炼
  • PostIn V1.3.1版本发布,新增在线更新程序命令,新增请求体json支持引用变量
  • asp网站作业下载二级建造师报名时间2022年官网
  • 信息平台网站建设微信商城网站方案