C++ STL 容器-Vector类型
C++ STL 容器-Vector类型
std::vector是C++标准库中的一个动态数组容器,它提供了随机访问迭代器,因此你可以像使用普通数组一样使用vector。
vector容器可以动态地增长和缩小,这意味着你可以在不预先指定数组大小的情况下向其中添加或删除元素。
特点
- 动态大小:vector的大小可以在运行时动态改变。
- 连续存储:vector中的元素在内存中连续存储,这使得它可以高效地访问和遍历元素。
- 随机访问迭代器:可以使用迭代器高效地访问vector中的任何元素。
- 自动内存管理:vector自动管理其内部元素的内存分配和释放,你不需要手动分配或释放内存。
简单使用直接看代码
using Group = std::vector<float>;
// 或者 typedef std::vector<float> Group;
// 初始化
Group a;
Group b=a;
Group c(a);
Group d(1.1);
Group e(1.1,2.2);
Group f(e.begin(),e.end());
Group g({1.0f,2.0f,3.0f});
Group h = {1.0f,2.0f};
auto bol = d.empty();
std::cout<< d.size()<<'\n';
std::cout<< d.max_size()<<'\n';
d.reserve(100); //预先分配100个float的空间
auto cap = d.capacity();
// 在C++的std::vector中,capacity()函数返回的是向量当前分配的存储空间能够容纳的元素数量。
//这并不意味着向量当前包含这么多元素,而是指向量在需要重新分配内存以容纳更多元素之前可以安全地存储的元素数量。
std::cout<< cap<<'\n';
std::cout<< d.max_size()<<'\n';
//支持的操作operator == != <> <= >=
// 赋值操作
b = g;
b.assign(3,1.0f); //赋值三个1.0f
b.assign(g.begin(),g.end());
b.assign({1.0f,2.0f,3.0f});
// 交换
b.swap(a);
std::swap(a,b);
// 元素访问
auto b0 =b[0];
auto ba0 =b.at(0);
auto bf1 =b.front();//访问第一个元素的引用
auto bb1 =b.back();//访问最后一个元素的引用
// 迭代器
auto lb1 =a.begin();
auto le1 =a.end();
auto lcb1 =a.cbegin();
auto lce1 =a.cend();
auto lb2 =a.rbegin();
auto le2 = a.rend();
auto cb = a.crbegin();
auto ce = a.crend();
a.pop_back();//弹出最后一个元素
b.erase(b.begin());//销毁第一个元素
b.erase(b.begin(),b.end());//销毁全部元素
b.push_back(10.0f);//添加浮点数到末尾
b.pop_back();
// 插入数据
auto iter = b.insert(b.end(),100.0f);//在b的最后插入一个100.0f,并且返回这个插入位置的迭代器
iter = b.insert(b.end(),10,-10.0f);//插入10个float,返回最后迭代器位置
b.insert(b.end(),h.begin(),h.end());
b.emplace(b.end(),10.0f);
b.emplace_back(10.11f);
b.resize(10); //修改分配空间大小
b.resize(100,1.1f);//分配空间大小到100,新的空间用11.1f填充内容
b.clear();//清除内容,不回收空间大小
b.shrink_to_fit();//回收多余的空间大小,比如你100只用了10,90会被回收
C++ STL 容器-Vector类型的更多相关文章
- 从零开始写STL—容器—vector
从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...
- [C++]STL容器Vector的内存释放
直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...
- STL容器vector应用注意事项
[1]提前分配足够空间以免不必要的重新分配和复制代价 关于vector容器重新分配和复制及析构释放的代价,请参见随笔<STL容器之vector>. 应用示例对比代码如下: #include ...
- STL容器 vector,list,deque 性能比较
C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差 ...
- STL容器 -- Vector
核心:Vector 是 STL 里的一个向量容器,可以像数组那样进行随机访问,能在尾部插入元素,对于元素的删除和插入可以动态管理内存. 头文件: #include <vector> 构造函 ...
- STL容器vector
一.什么是Vector 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象.可以简单的认为, ...
- STL - 容器 - vector简单应用
VectorTest.cpp #include <vector> #include <iostream> #include <string> #include &l ...
- ACM常用STL容器
// STL(标准模板库),由三大部分组成:容器,算法,迭代器 // STL六大组件:container(容器),algorthm(算法),iterator(迭代器) // function obje ...
- 跟我一起学STL(2)——vector容器详解
一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ...
- 【转】c++中Vector等STL容器的自定义排序
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1.Copy构造函数 2.赋值=操作符 3.能够销毁对象的析构函数 另外: 1. ...
随机推荐
- 如何给所有的 await async 函数添加try/catch?
如何给所有的 await async 函数添加try/catch?做全局捕获异常. 面试官:如何给所有的 await async 函数添加try/catch?做全局捕获异常. 我们可以使用 windo ...
- HTML直接插入js、css
简单的小页面可以使用 代码量大的话还是建议引用代码 直接包裹起来 <style>这里添加css代码</style> 加入css标识 <style type="t ...
- LyScript 实现应用层钩子扫描器
Capstone 是一个轻量级的多平台.多架构的反汇编框架,该模块支持目前所有通用操作系统,反汇编架构几乎全部支持,本篇文章将运用LyScript插件结合Capstone反汇编引擎实现一个钩子扫描器. ...
- socket编程 [补档-2023-07-10]
Linux网络编程 1.socket编程 socket是一种通信机制,用于在网络中不同计算机之间进行数据传输,当然也可用用于进程间通信.在linux中,有文件描述符这么个东西,我们可以通过socket ...
- 我管你什么okr还是kpi,PPT轻松交给你
word一键转ppt 通过[文件]→[选项]→[快速访问工具栏],选择[不在功能区中的命令],找到[发送到Microsoft PowerPoint ],单击[添加]后再[确定] 调出功能按钮后,就可以 ...
- 微软Bing正面对阵谷歌!竞标争夺Firefox默认搜索引擎
在今早的谷歌I/O大会上,谷歌带来了全新的PaLM 2人工智能语言模型,并将用该模型升级Bard对话机器人以及谷歌搜索. 但面对来势汹汹的谷歌,微软似乎并不打算退却. 根据The Informatio ...
- h5st 4.3版本代码研究
背景介绍 最近比较悠闲,于是没事研究了一下某东的h5st代码,2024年新鲜出炉的前端加密代码: 最大的惊喜并不是算法的复杂,在逆向破解代码的过程中,对js加密混淆有了新的认识: 于是心血来潮,回到这 ...
- js 手动实现bind方法,超详细思路分析!
壹 ❀ 引 在 js 实现call和apply方法 一文中,我们详细分析并模拟实现了call/apply方法,由于篇幅问题,关于bind方法实现只能另起一篇. 在模拟bind之前,我们先了解bind的 ...
- XTW100编程器在Win10下的安装
XTW100 这是一个淘宝上卖得很多的经典编程器, 用于写入24和25系列的存储芯片. 最初使用的是stm32f103c8t6, 因为f103价格飞涨, 市面上大都换成国产的兼容mcu了, 软件和使用 ...
- DS1302与STC12的连接电路和驱动实现
简介 DS1302是低功耗带RAM的实时时钟电路, 常见的SOP8封装体积很小, 它可以对年月日周时分秒进行计时, 具有闰年补偿功能, 工作电压为2.0V-5.5V, 采用三线接口与CPU进行同步通信 ...