【STL-vector】

  1. vector构造函数
  2. vector赋值操作
  3. vector容量和大小
  4. vector插入和删除
  5. 数据存取
  6. 互换容器,实现两个容器内元素的互换,具有收缩内存的作用
  7. vector预留空间reserve,减少vector在动态拓展容量时的拓展次数
#include<iostream>
#include<vector>
#include<string>
using namespace std;//函数原型:
//vector<T> v; //采用模板实现类实现,默认构造函数
//vector(v.begin(), v.end()); //将v[begin(), end())区间中的元素拷贝给本身。
//vector(n, elem); //构造函数将n个elem拷贝给本身。
//vector(const vector& vec); //拷贝构造函数。void printvector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++)  //从开始到结束{cout << *it << " ";}cout << endl;
}
//vector构造函数
void test01()
{//第一种   //vector<T> v; //采用模板实现类实现,默认构造函数vector<int> v1;  //无参构造for (int i = 0; i < 10; i++){v1.push_back(i);}printvector(v1);//第二种   vector(v.begin(), v.end()); //将v[begin(), end())区间中的元素拷贝给本身。vector<int> v2(v1.begin(), v1.end());printvector(v2);//第三种   vector(n, elem); //构造函数将n个elem拷贝给本身。vector<int> v3(10, 987);printvector(v3);//第四种   vector(const vector& vec); //拷贝构造函数。vector<int> v4(v3);printvector(v4);
}//vector赋值操作
void test02()
{//vector& operator=(const vector & vec); //重载等号操作符//assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。//assign(n, elem); //将n个elem拷贝赋值给本身。vector <int> v1;  //无参构造for (int i = 0; i < 10; i++){v1.push_back(i);}printvector(v1);vector <int>v2;v2 = v1;printvector(v2);vector<int> v3;v3.assign(v1.begin(), v1.end());printvector(v3);vector<int> v4;v4.assign(10, 100);printvector(v4);
}//vector容量和大小
void test03()
{//empty(); //判断容器是否为空//capacity(); //容器的容量//size(); //返回容器中元素的个数//resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。//resize(int num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。//如果容器变短,则末尾超出容器长度的元素被删除vector<int> v1;for (int i = 0; i < 8; i++){v1.push_back(i);}printvector(v1);if (v1.empty()){cout << "v1为空" << endl;}else {cout << "v1不为空" << endl;cout << "v1的容量" << v1.capacity() << endl;  //容量大于等于size,容量不够c++从新开辟一个新的,把旧的放在新的里,旧的c++会处理cout << "v1的大小" << v1.size() << endl;}//resize 重新指定大小,若指定的更大,默认用0填充新位置,可以重载版本替换默认填充v1.resize(15, 10);  //默认用0填充,现填充10printvector(v1);//重新指定大小,若指定的更小,超出部分元素被删除v1.resize(5);//指定大小5,超出部分元素被删除printvector(v1);
}//vector插入和删除
void test04()
{//push_back(ele); //尾部插入元素ele//pop_back(); //删除最后一个元素//insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele//insert(const_iterator pos, int count, ele); //迭代器指向位置pos插入count个元素ele//erase(const_iterator pos); //删除迭代器指向的元素//erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素//clear(); //删除容器中所有元素vector<int>v1;//尾插v1.push_back(10);v1.push_back(20);v1.push_back(30);v1.push_back(40);v1.push_back(50);printvector(v1);//尾删v1.pop_back();printvector(v1);//插入v1.insert(v1.begin(), 100);printvector(v1);v1.insert(v1.begin(), 2, 1000);printvector(v1);//删除v1.erase(v1.begin());printvector(v1);cout << " ===========" << endl;//清空v1.erase(v1.begin(), v1.end());v1.clear();printvector(v1);}//vector数据存取
void test05()
{//at(int idx); //返回索引idx所指的数据//operator[]; //返回索引idx所指的数据//front(); //返回容器中第一个数据元素//back(); //返回容器中最后一个数据元素vector<int> v1;for (int i = 0; i < 10; i++){v1.push_back(i);}for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;for (int i = 0; i < v1.size(); i++){cout << v1.at(i) << " ";}cout << endl;cout <<"v1的第一个元素为" << v1.front() << endl;cout <<"v1的最后一个元素为" << v1.back() << endl;
}//vector互换容器,就是实现两个容器内元素进行互换
void test06()
{vector<int> v1;for (int i = 0; i < 10; i++){v1.push_back(i);}printvector(v1);vector<int> v2;for (int i = 10; i > 0; i--){v2.push_back(i);}printvector(v2);//互换容器cout << "互换后" << endl;v1.swap(v2);printvector(v1);printvector(v2);}//互换容器具有收缩内存的作用
void test07()
{vector<int> v;for (int i = 0; i < 100000; i++){v.push_back(i);}cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;//收缩内存vector<int>(v).swap(v); //匿名对象//本来的容量大小为100000+,但是收缩后容量等于大小cout << "v的容量为" << v.capacity() << endl;cout << "v的大小为" << v.size() << endl;}//vector 预留空间
//减少vector在动态扩展容量时的扩展次数
void test08()
{vector<int> v;v.reserve(100000);   //直接预留这么多100000给元素长度int num = 0;int* p = NULL;for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0])  //说明p一直指向第0个地址,即没有疯狂的拓展空间  ,如果给v.reserve(100000);注释掉,需要30此拓展{p = &v[0];num++;}}cout << "num:" << num << endl;
}
int main()
{test01();test02();test03();test04();test05();test06();test07();test08();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vite和mockjs配合使用

vite mockjs 当后端还没准备完成之前&#xff0c;前端可以使用 mock 模拟后端响应&#xff0c;提高开发效率 1、安装插件 使用 vite-plugin-mock 插件&#xff0c;配合mockjs完成项目的 mock 配置 npm install mockjs vite-plugin-mock2、vite配置插件 在 vite.config.js…

聊聊PowerJob的AliOssService

序 本文主要研究一下PowerJob的AliOssService DFsService tech/powerjob/server/extension/dfs/DFsService.java public interface DFsService {/*** 存储文件* param storeRequest 存储请求* throws IOException 异常*/void store(StoreRequest storeRequest) throws IOEx…

C - Monotonically Increasing

很妙的dfs&#xff1a;记录层数以及前一个数是多少。 代码&#xff1a; int ans[11]; int n,m;void dfs(int u,int pre){if(un1){for(int i1;i<n;i)cout<<ans[i]<< ;cout<<endl;return;}for(int ipre1;i(n-u)<m;i){ans[u]i;dfs(u1,i);} }void solve(…

Linux问题 apt-get install时 无法解析域名“cn.archive.ubuntu.com”

问题描述: 在安装程序时会出现无法解析域名的错误 解决办法: 1、编辑文件 sudo vim /etc/resolv.conf 2、在最后加上(按键 i 进入编辑模式) nameserver 8.8.8.8 3、保存退出(:wq)

Upload靶场通关教程(旧版20关)

文件上传类型&#xff1a; 前端验证&#xff1a;1 MIME类型验证&#xff1a;2 黑名单验证&#xff1a;3~10&#xff0c;19 大小写绕过、空格绕过、解析后缀数字绕过、点绕过、/绕过、::$DATA绕过 白名单验证&#xff1a;11~18&#xff0c;20 %00截断、二次渲染、文件包含、…

网络安全B模块(笔记详解)- Apache安全配置

1.打开服务器场景(A-Server),通过命令行清除防火墙规则。在服务器场景上查看apache版本,将查看到的服务版本字符串完整提交; 2.检测服务器场景中此版本apache是否存在显示banner信息漏洞,如果验证存在,修改配置文件将此漏洞进行加固,并重启Apache服务,将此加固项内容…

力扣每日一练(24-1-20)

大脑里的第一想法是排列组合&#xff0c;直接给出超级准确的最优解。 但不适用&#xff0c;hhh 只要连续的n个元素大于或者等于target就可以了 题目比自己想象的要好解决 解法是使用滑动窗口算法。这个算法的基本思想是维护一个窗口&#xff0c;使得窗口内的元素总和大于等于目…

代码随想录算法训练营第二十五天| 216.组合总和III、17.电话号码的字母组合

216.组合总和III 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;依旧是正常遍历&#xff0c;过程中记录遍历的所有节点之和&#xff0c;如果当前元素之和已经大于所给定的值&#xff0c;退回上一节点 ja…

算法常用思路总结

思路 1. 求数组中最大最小值思路代码 2. 计算阶乘思路&#xff1a;代码&#xff1a; 3. 得到数字的每一位思路代码 4. 计算时间类型5. 最大公约数、最小公倍数6. 循环数组的思想题目&#xff1a;猴子选大王代码 补充经典例题1. 复试四则运算题目内容题解 2. 数列求和题目内容题…

专升本-拓展部分-信息安全

信息安全&#xff1a; 1.信息本身的安全&#xff0c;也是信息安全的基本属性&#xff1a;保密性&#xff0c;完整性&#xff0c;可用性 信息本身的安全是指保证信息的保密性&#xff08;非授权用户不能访问信息&#xff09;&#xff0c;完整性&#xff08;信息正确&#xff0c…

Pytest 测试框架与Allure 测试报告——Allure2测试报告-L3

目录&#xff1a; allure2报告中添加附件-图片 Allure2报告中添加附件Allure2报告中添加附件&#xff08;图片&#xff09;应用场景Allure2报告中添加附件&#xff08;图片&#xff09;-Python代码示例&#xff1a;allure2报告中添加附件-日志 Allure2报告中添加附件&#xff…

Flink处理函数(3)—— 窗口处理函数

窗口处理函数包括&#xff1a;ProcessWindowFunction 和 ProcessAllWindowFunction 基础用法 stream.keyBy( t -> t.f0 ).window( TumblingEventTimeWindows.of(Time.seconds(10)) ).process(new MyProcessWindowFunction()) 这里的MyProcessWindowFunction就是ProcessWi…

《WebKit 技术内幕》之五(4): HTML解释器和DOM 模型

4 影子&#xff08;Shadow&#xff09;DOM 影子 DOM 是一个新东西&#xff0c;主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…

【前端学习笔记2】javaScript基础

是什么&#xff1a; 是一种运行在客户端&#xff08;服务器的编程语言&#xff09; javacript分为行内JavaScript&#xff0c;内部JavaScript&#xff0c;外部JavaScript 内部JavaScript 直接写在html中body里面 alert&#xff08;“hello&#xff0c;world”&#xff09;…

Flutter 入门

什么是Flutter Flutter 只是一个用来解决跨平台的UI框架&#xff0c;最终还是要使用原生平台进行绘制&#xff0c;对于大部分和系统API无关的页面都可以使用Flutter处理,但是有一些获取系统信息的页面比如某个页面获取Android是否打开了通知栏权限&#xff1f;获取手机电池电量…

React16源码: React中的IndeterminateComponent的源码实现

IndeterminateComponent 1 &#xff09;概述 这是一个比较特殊的component的类型&#xff0c; 就是还没有被指定类型的component在一个fibrer被创建的时候&#xff0c;它的tag可能会是 IndeterminateComponent在 packages/react-reconciler/src/ReactFiber.js 中&#xff0c;有…

Impala:基于内存的MPP查询引擎

Impala查询引擎 1、Impala概述 1、Impala概述 Impala是Cloudera公司主导研发的高性能、低延迟的交互式SQL查询引擎&#xff0c;它提供SQL语义&#xff0c;能查询存储在Hadoop的HDFS和HBase中的PB级大数据。Impala是CDH平台首选的PB级大数据实时交互式查询分析引擎 2015年11月&…

使用Sobel算子把视频转换为只剩边缘部分

效果展示 原始视频 修改后的视频 整体代码 import cv2vc cv2.VideoCapture(test.mp4)if vc.isOpened():open, frame vc.read() else:open Falsei 0 while open:ret, frame vc.read()if frame is None:breakif ret True:i 1# 转换为灰度图gray cv2.cvtColor(frame, cv…

实现分布式锁

背景 分布式锁是一种用于协调分布式系统中多个节点之间并发访问共享资源的机制。在分布式系统中&#xff0c;由于存在多个节点同时访问共享资源的可能性&#xff0c;需要使用分布式锁来保证数据的一致性和正确性。 今天要实现的是分布式场景中的互斥类型的锁。 下面时分布…

Tensorflow 入门基础——向LLM靠近一小步

进入tensflow的系统学习&#xff0c;向LLM靠拢。 目录 1. tensflow的数据类型1.1 数值类型1.2 字符串类型1.3 布尔类型的数据 2. 数值精度3. 类型转换3.1 待优化的张量 4 创建张量4.1 从数组、列表对象创建4.2 创建全0或者1张量4.3 创建自定义数值张量 5. 创建已知分布的张量&…