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

C++(vector):

目录

定义vector:

初始化vector:

输出操作:

使用索引进行遍历输出:

使用迭代器进行输出:

使用at()函数:

数量、容量和判空操作:

减少容量:

删除和插入元素:

push_back和pop_back:

insert和erase、clear:

访问首元素和尾元素和排序:

查找:


C++中的vector是标准模板库(STL)提供的动态数组容器,可以根据需要随时调整大小。

使用的vector需要包含其头文件<vector>。

定义vector:

#include <iostream>
#include <string>int main(){std::vector<T> vec;return 0;
}

初始化vector:

#include <iostream>
#include <vector>int main(){std::vector<T> vec;//默认初始化std::vector<T> vec1(n,target);//指定大小和默认值,n是个数,target是默认值std::vector<T> vec2(vec1);//拷贝构造,将vec1的值复制给vec2std::vector<T> vec3 = {n1,n2,..,n}使用初始化列表std::vector<T> vec4(std::move(vec3));//将vec3移动给vec4return 0;
}

输出操作:

使用索引进行遍历输出:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}return 0;
}

示例运行结果:

使用迭代器进行输出:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";}return 0;
}

示例运行结果:

使用at()函数:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < vec.size(); i++) {std::cout << vec.at(i) << " ";}return 0;
}

示例运行结果:

数量、容量和判空操作:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };std::cout << "元素数量:" << vec.size() << std::endl;std::cout << "容量大小:" << vec.capacity() << std::endl;if (vec.empty()) {std::cout << "为空" << std::endl;}else {std::cout << "非空" << std::endl;}vec.clear();std::cout << "元素数量:" << vec.size() << std::endl;std::cout << "容量大小:" << vec.capacity() << std::endl;return 0;
}

示例运行结果:

可以看出对数组进行清空,实际容量并不会随着数组被清空而释放,可以使用reserver()可以进行预留空间,在已知数据量的大小时,可以减少动态扩容的开销。reserver()只对容量进行改变,并不影响有效元素数量。

减少容量:

使用shrink_to _fit()函数进行释放空间。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };std::cout << "元素数量:" << vec.size() << std::endl;std::cout << "容量大小:" << vec.capacity() << std::endl;vec.clear();vec.shrink_to_fit();std::cout << "元素数量:" << vec.size() << std::endl;std::cout << "容量大小:" << vec.capacity() << std::endl;return 0;
}

使用swap()交换之后对临时对象进行释放空间,从而达到减小容量。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };std::cout << "元素数量:" << vec.size() << std::endl;std::cout << "容量大小:" << vec.capacity() << std::endl;{std::vector<int> vec1;vec1.swap(vec);std::cout << "vec元素数量:" << vec.size() << std::endl;std::cout << "vec容量大小:" << vec.capacity() << std::endl;std::cout << "vec1元素数量:" << vec1.size() << std::endl;std::cout << "vec1容量大小:" << vec1.capacity() << std::endl;std::cout << "vec1的内容:" << std::endl;for (int i = 0; i < vec1.size(); i++) {std::cout << vec1[i] << " ";}}return 0;
}

示例运行结果:

删除和插入元素:

push_back和pop_back:

使用pop_back()函数时,尽量先进性判空,避免对一个元素为空的容器进行删除操作。

#include <iostream>
#include <vector>int main() {std::vector<int> vec;for (int i = 0; i < 10; i++) {vec.push_back(i);}for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}std::cout << std::endl;std::cout << "元素数量:" << vec.size() << std::endl;std::cout << "容量大小:" << vec.capacity() << std::endl;std::cout << "删除操作:" << std::endl;while (!vec.empty()) {vec.pop_back();}std::cout << "元素数量:" << vec.size() << std::endl;std::cout << "容量大小:" << vec.capacity() << std::endl;return 0;
}

示例运行结果:

insert和erase、clear:

erase()函数进行删除之前,尽量先进行判空操作,避免对一个元素为空的容器进行删除操作。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };vec.erase(vec.begin(), vec.begin() + 4);std::cout << "删除之后的结果展示:" << std::endl;for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}std::cout << std::endl;vec.insert(vec.begin(), 0);std::cout << "插入之后的结果展示:" << std::endl;for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}std::cout << std::endl;vec.clear();std::cout << "删除所有数据元素:" << std::endl;std::cout << "元素数量:" << vec.size() << std::endl;return 0;
}

示例运行结果:

访问首元素和尾元素和排序、翻转:

foront():访问首元素值。

back():访问尾元素值。

访问首元素和尾元素之前先对容器进行判空,避免未定义行为。

reverse():对容器进行翻转,头文件是<algorithm>,也可以指定范围内的元素进行翻转,参数1起始位置,参数2终止位置。

sort()函数需要包含头文件<algorithm>。

greater<int>():需要包含头文件<functional>,也可以使用lamda表达式,进行函数重写之后按照新的规则进行排序。

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };std::cout << "首元素:" << vec.front() << std::endl;std::cout << "尾元素:" << vec.back() << std::endl;std::reverse(vec.begin(), vec.end());std::cout << "翻转之后的结果:" << std::endl;for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}std::cout << std::endl;sort(vec.begin(), vec.end());std::cout << "升序排序之后的结果:" << std::endl;for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}std::cout << std::endl;sort(vec.begin(), vec.end(), std::greater<int>());std::cout << "降序排序之后的结果:" << std::endl;for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}return 0;
}

示例运行结果:

查找:

使用find()函数进行查找。使用find()函数需要包含头文件<algorithm>。

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>int main() {std::vector<int> vec = { 1,2,3,4,5,6,7,8,9,10 };auto it = std::find(vec.begin(), vec.end(), 6);if (it != vec.end()) {std::cout << "找到目标值" << std::endl;}else {std::cout << "没有找到目标值" << std::endl;}return 0;
}

示例运行结果:

http://www.dtcms.com/a/348838.html

相关文章:

  • 笔试——Day48
  • 【C++组件】ODB 安装与使用
  • LeetCode 42.接雨水
  • 【Flex SerialPort】一个基于Qt6的支持自定义按键指令的串口工具
  • 浏览器发送网页详细过程分解
  • 释放工作精力:火语言 RPA 的实用功能与效率提升​
  • VMware centos磁盘容量扩容教程
  • 解决虚拟机network服务启动失败问题
  • Linux中的指令
  • 从字节码层面剖析以太坊智能合约创建原理
  • [OpenVela] 音乐播放器1.0
  • Latent Action在具身智能中的使用
  • C++——多态
  • 【ABAP4】基本语法1
  • 第4章栈和队列:队列基础知识
  • pom.xml 标签整理各个标签的用途和含义
  • 蓝凌EKP产品:从 XML 到 JSON ——表单存储的性能优化实践
  • 前端漏洞(上)- CSRF漏洞
  • 强光干扰下误检率↓79%!陌讯动态决策算法在安全带检测的实战优化
  • Redis详解--基本篇
  • Linux 的 TCP 网络编程常用API
  • 网络流量分析——使用捕获和显示过滤器查询网络流量
  • 每天自动备份oracle
  • 关于熵减 - 力学单位和来源
  • 安装gitlab
  • C++ AOV 拓扑排序
  • pyecharts可视化图表-scatter:从入门到精通
  • 2020/12 JLPT听力原文 问题二 5番
  • 【网络运维】Shell 脚本编程:case 条件语句
  • 【大语言模型 18】Vision Transformer革命解析:图像理解的范式突破与架构创新